深度优先遍历:首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未被访问过的顶点;
当没有未访问过的顶点时,则回到上一个顶点,继续试探访问别的顶点,直到所有的顶点都被访问过
#include<iostream>
using namespace std;
void dfs(int cur);
int n,m,e[10][10],max=100,a,b,num,book[10]={0};//n顶点个数,m边的个数,book[]标记是否被访问过
int main()
{
cin>>n>>m;
for(int i=0;i<n;++i)
//初始化边,图的邻接矩阵存储法
{
for(int j=0;j<n;++j)
{
if(i==j)
e[i][j]=0;
else
e[i][j]=max;
}
}
for(int h=0;h<m;++h)
//读边
{
cin>>a>>b>>num;
e[a][b]=1;
e[b][a]=1;
}
dfs(0);
//图的深度遍历算法
system("Pause");
return 0;
}
void dfs(int cur) //cur是当前所在的顶点编号
{
int sum=0;
sum++;
//每访问一个顶点,sum++,当sum与顶点个数相等时表示所有顶点被访问过
cout<<" "<<cur;
if(sum==n)
return ;
for(int k=0;k<n;++k)
{
if(e[cur][k]==1&&book[k]==0)//判断当前顶点cur到顶点i是否有边,并且判断顶点i是否被访问过
{
book[k]=1;
//标记顶点已经被访问过
dfs(k);
//从顶点继续访问
}
}
return ;
}