#include <stdio.h>
int book[101], sum, n, e[101][101];
void dfs(int cur)//cur为当前所在的顶点编号
{
int i;
printf("%d ", cur);
sum++;//每次访问一个顶点,suam+1
if (sum == n) return;//所有顶点都访问完
for (i = 1; i <= n; i++)
{
if (e[cur][i] == 1 && book[i] == 0)
{
book[i] = 1;
dfs(i);
}
}
return;
}
int main()
{
int i, j, m, a, b;
printf("输入顶点的数目: ");
scanf("%d", &n);
printf("输入边的数目: ");
scanf("%d", &m);
for (i = 1; i<= n; i++)
for (j = 1; j <= n; j++)
{
if (i == j)
e[i][j] = 0;
else
e[i][j] = 99999999;//假设99999999为无穷大
}
//读入边
for (i = 1; i<= m; i++)
{
printf("输入两个相邻的顶点(空格隔开):");
scanf("%d %d", &a, &b);
e[a][b] = 1;
e[b][a] = 1;//这里为无向图
}
//从1号顶点出发
book[1] = 1;
dfs(1);
getchar();
getchar();
return 0;
}
深度优先遍历的主要思想是:首先以一个未被走过的顶点作为起始顶点,沿着当前顶点的边走到未访问过的顶点;当没有未访问过的顶点时,则回到上一个顶点,继续试探访问别的顶点,直到所有的顶点都被访问过。