#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 的本质是递归 递归一定要写递归的条件!!