下面发布的图形代码的 DFS 遍历是不是有任何改进? [关闭]

Posted

技术标签:

【中文标题】下面发布的图形代码的 DFS 遍历是不是有任何改进? [关闭]【英文标题】:Can there be any improvements in DFS traversal of graph code posted below? [closed]下面发布的图形代码的 DFS 遍历是否有任何改进? [关闭] 【发布时间】:2016-01-27 13:25:52 【问题描述】:

我想提高这个 DFS 遍历代码的效率。

我打算为自己创建一个标准代码,这样我就可以将它用于在线竞争性编码竞赛,而无需重新编写整个代码,只需对该代码进行一些修改。

    #include <iostream>
    #include<vector>
    using namespace std;
    void print_graph(const vector<vector <int> >GRAPH);
    void set_graph( vector<vector <int> >&GRAPH,const unsigned int sz);
    void DFS_Util(const vector<vector <int> >GRAPH,bool visted[]);
    void DFS(const vector<vector <int> >GRAPH,const unsigned int V);
    int main()
    
    vector<vector <int > >GRAPH;
    int vertices;
    cin>>vertices;

      for(int i=0;i<vertices;i++)
           vector<int>temp(vertices,0);
          GRAPH.push_back(temp);
        
    set_graph(GRAPH,GRAPH.size());

    print_graph(GRAPH);
    DFS(GRAPH,0);

        return 0;
    

    void print_graph(const vector<vector <int> >GRAPH)
       int sz=GRAPH.size();
    for(int i=0;i<sz;i++)
        
            for(int j=0;j<sz;j++)
        
          cout<<GRAPH[i][j]<<" ";
        cout<<endl;
        
    
    void set_graph( vector<vector <int> >&GRAPH,const unsigned int sz)
    
     for(unsigned int i=0;i<sz;i++)
        
            for(unsigned int j=0;j<sz;j++)
        
            int c;
            cin>>c;
    GRAPH.at(i).at(j)=c;
        
        
    

    void DFS_Util(const vector<vector <int> >GRAPH,const unsigned int v,bool visted[])
    
    visted[v]=true;
    cout<<" "<<v;

    for(unsigned int j=0;j<GRAPH.size();j++)
    
     if(!visted[j]&&GRAPH[v][j]>=1)
       DFS_Util(GRAPH,j,visted);
    

    
    void DFS(const vector<vector <int> >GRAPH,const unsigned int V)
    
        bool *visited=new bool[GRAPH.size()];
        for(unsigned int i=0;i<GRAPH.size();i++)
        
            visited[i]=false;
        

        DFS_Util(GRAPH,V,visited);

    

【问题讨论】:

这要么太宽泛(你的意思是什么改进?)要么是codereview的好候选者 我想提高这段代码的空间和时间复杂度。 【参考方案1】:

是的,不要为每次调用都复制图表。通过引用传递它,尤其是因为您不修改它。

void DFS(const vector<vector <int> > & GRAPH,const unsigned int V)
void DFS_Util(const vector<vector <int> > & GRAPH,const unsigned int v,bool visted[])

您应该会看到这些更改带来了很大的加速。

【讨论】:

以上是关于下面发布的图形代码的 DFS 遍历是不是有任何改进? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

图的遍历方法——DFS和BFS

图的遍历 | 1131地铁图: dfs复杂模拟题

Python|DFS(深度优先搜索)介绍

后序遍历的优秀例题——851. 喧闹和富有

[NOI2013]树的计数

遍历行如何提高速度