首页 > 代码库 > 如何实现深度优先遍历(DFS)
如何实现深度优先遍历(DFS)
DFS实现步骤如下:
①访问顶点V,并标记V已经访问
②查找V的第一个邻接顶点w
③若W存在,则继续执行,否则算法结束
④若W未被访问,则使用DFS递归访问w
⑤查找V的下一个邻接节点,并记为W,转到步骤③
对上图进行DFS,则访问顺序为
A B D C E
使用伪代码如下:
Vector <int> G[maxn] int vis[maxn] void dfs(int u) { vis[u]=1; //设置为已经访问 int d=G[u].Size()//得到顶点u的所有邻接节点,个数为d for(int i=0;i<d;i++) { int v=G[u][i];//扫描所有的邻接顶点,如果没访问过,则DFS访问这个顶点 if(!vis[v]) dfs(v); } }
附上全部代码:
#include<iostream> using namespace std; #define VertexSize 10 int visit[VertexSize]; typedef struct { int weight[VertexSize][VertexSize]; }Graph; void Initiate_Graph(Graph *g,int n) { int i,j; for(i=0;i<n;i++) visit[i]=0; for(j=0;j<n;j++) { if(i==j) g->weight[i][j]=0; else g->weight[i][j]=0x7fff; } } void InsertEdge(Graph *g,int v,int w,int weight,int n) { if(v<0 || v>=n||w<0||w>=n) { cout<<"overflow!"<<endl; } g->weight[v][w]=weight; } void dfs(Graph *g,int u,int n) { cout<<u<<" "; visit[u]=1; int i; for(i=0;i<n;i++) { if(g->weight[u][i]>0 && g->weight[u][i]<0x7fff && !visit[i]) { visit[i]=1; dfs(g,i,n); } } } void main() { Graph g; int n,edge; cout<<"请输入图的顶点个数:"<<endl; cin>>n; cout<<"请输入图的边个数"<<endl; cin>>edge; Initiate_Graph(&g,n); int i,p1,p2,weight; cout<<"请输入顶点-顶点-权值:"<<endl; for(i=0;i<edge;i++) { cin>>p1>>p2>>weight; InsertEdge(&g,p1,p2,weight,n); } dfs(&g,0,n); system("pause"); }
如何实现深度优先遍历(DFS)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。