题目描述:
对于给定的图G(邻接矩阵表示),和给定的顶点V,要求从顶点V出发遍历图G,输出符合条件的深度优先序列。
输入格式:
第一行两个整数n和v,n表示图的顶点数(n<=100),v表示遍历的开始顶点;
接下来n行是图G的邻接矩阵。
输出格式:
一行输出以顶点v为起点的深度优先遍历序列,对于任一起点,首先遍历的是顶点序号最小的、尚未被访问的一条边。
样例输入:
4 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 0
样例输出:
1 2 3 4
时间限制: 1000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
bool a[201][201]={};
bool f[40001]={};
int n,e;
void dfs(int x){
f[x]=1;
cout<<x<<" ";
for(int i=1;i<=n;i++){
if(a[x][i]==1&&!f[i]){
dfs(i);
}
}
}
int main(){
cin>>n>>e;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
dfs(e);
return 0;
}