题目描述
读入一个用邻接矩阵存储的无向连通图,输出它的深度优先遍历序列
输入格式
第一行一个正整数 n(2≤n≤100),表示图中的顶点数,顶点编号为 1~n 。
接下来是一个 n×n 的邻接矩阵,a[i][j]=1 表示顶点 i 和顶点 j 之间有直接边相连,a[i][j]=0 表示没有直接边相连。
保证 i=j 时,a[i][j]=0,并且 a[i][j]=a[j][i]。
输出格式
输出从顶点 1 开始,对该图进行深度优先遍历得到的顶点序列,每两个数之间用一个 -
分隔。
思考:如果不是连通图,比如某个顶点 x 孤立在外,即邻接矩阵中的 a[x][j]=0,a[i][x]=0,该如何处理?
样例输入
8
0 1 1 0 0 0 0 0
1 0 0 1 1 0 0 0
1 0 0 0 0 0 1 1
0 1 0 0 0 1 0 0
0 1 0 0 0 1 0 0
0 0 0 1 1 0 0 0
0 0 1 0 0 0 0 1
0 0 1 0 0 0 1 0
样例输出
1-2-4-6-5-3-7-8
问题提示
#include <iostream>
using namespace std;
int a[101][101];
int v[101];
bool flag;
int n;
int dfs(int cur)
{
if(!flag)
{
cout<<cur;
flag=true;
}
else
{
cout<<"-"<<cur;
}
for(int i=1;i<=n;i++)
{
if(a[cur][i]==1 && !v[i])
{
v[i]=1;
dfs(i);
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
v[1]=1;
dfs(1);
return 0;
}