思想:首先以一个未被访问过的顶点做起始顶点,沿当前顶点的边走到未被访问过的顶点,如果没有未被访问过的点,则回到上一个顶点,直到所有的顶点都被访问过。
代码:
变量cur:正在进行遍历的顶点
数组e:图的边(邻接矩阵)
book:用来记录那些顶点已经被访问过
sum:已经访问过多少顶点
n:图的顶点的总个数
#include<stdio.h>
int book[101],sum,n,i,e[101][101];
void dfs(int cur){ //注意此处要写void def 不能写 int def
printf("%d",&cur);
sum++; //每访问到一个顶点,sum用来计数
if(sum==n)
return ; //如果顶点全被访问,则退出
for(i=1;i<=n;i++){ //从1号顶点到n号顶点依次尝试,看那些定点与该点有边相连
if(e[cur][i]==1&&book[i]==0){ //cur点与i点相连,且i点未被访问
book[i]=1; //将i标记为已访问
dfs(i); //继续从i开始遍历
}
}
return;
}
int main(void){
int i,j,m,a,b;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){ //初始化数组e
for(j=1;j<=n;j++){
if(i==j){
e[i][j]=0;
}
else{
e[i][j]=999999999; //假设999999999为无穷大
}
}
}
//输入m对相连的顶点
for(i=1;i<=m;i++){
scanf("%d%d",&a,&b);
e[a][b]=1;
e[b][a]=1; //这里是无向图,所以要把e[b][a]也赋值为1
}
//从一号顶点开始访问
book[1]=1;//标记一号顶点为已访问
dfs(1); //从一号顶点开始深度优先搜索
getchar();getchar();
return 0;
}