数据结构——图 DFS遍历

来源:互联网 发布:php b2c商城 编辑:程序博客网 时间:2024/06/03 05:46
#include <stdio.h>
int a[50][50]; //邻接矩阵 int b[50];  //校验数组 用来判断当前结点是否遍历过 int m,n,i,j,s=0; void dfs(int cur); //cur代表当前结点 int main(){printf("请输入图的行m和列n的值:");scanf("%d %d",&m,&n); printf("请输入邻接矩阵:");for(i=0;i<m;i++)   //对 校验数组赋初值 为0  0代表当前没遍历 1代表当前已经遍历 {b[i]=0; }for(i=0;i<m;i++)  // 输入邻接矩阵 {for(j=0;j<n;j++){scanf("%d",&a[i][j]);} } b[0]=1; //代表0结点 已经遍历 dfs(0); } void dfs(int cur){int i,j;printf("%d ",cur);s++;//s代表当前遍历的结点数 if(s==m)  //递归终止条件  当遍历数等于结点数 返回 {return;}else{for(i=0;i<m;i++)  //i代表列 {if(a[cur][i]==1&&b[i]==0)  //只有邻接矩阵为1 且未被遍历时 才能满足遍历条件  {b[i]=1;        //标记当前结点已被遍历 dfs(i);        //递归调用 }}}}

运行结果:


DFS 的本质是递归 递归一定要写递归的条件!!

原创粉丝点击