参考书:
《啊哈算法第五章:图的遍历》
《第一节。深度优先和广度优先》——深度优先
深度优先算法实现图的遍历代码如下:
#include <iostream>
using namespace std;
int book[101],sum,n=5,e[101][101];
void dfs(int cur)
{
cout<<" "<<cur;
sum++;
if(sum==n) return;
for(int i=1;i<=n;i++) //从1号顶点到n号顶点依次尝试,看哪些顶点与当前顶点有边相连。
{
//判断当前顶点cur与顶点i是否有边相连,并判断顶点i 是否已经访问过
if(e[cur][i]==1&&book[i]==0)
{
book[i]=1; //标记顶点i已经访问过
dfs(i); //从顶点i 再出发继续访问。
}
}
return;
}
int main()
{
//初始化二维矩阵e
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
e[i][j]=0;
else
e[i][j]=99999999;
}
}
//定义一个二维数组表示顶点之间边
int bian[5][2]={{1,2},{1,3},{1,5},{2,4},{3,5}};
int num=sizeof(bian)/sizeof(bian[0]);
for(int i=1;i<=num;i++)
{
e[bian[i-1][0]][bian[i-1][1]]=1;
e[bian[i-1][1]][bian[i-1][0]]=1;
}
book[1]=1;
dfs(1);
cout<<endl;
system("pause");
return 0;
}
运行结果为:
1 2 4 3 5
请按任意键继续. . .