下面发布的图形代码的 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 遍历是不是有任何改进? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章