题目描述
给定一个由 m 个顶点 n 条边构成的无向连通图,输出它的DFS序列。
要求:
1. 起始顶点(每行DFS序列的起点)从小到大排列,即从1到m。
2. 对同一顶点的多个邻接点,优先遍历编号较大的邻接点。
输入格式
输入数据有若干行:
第一行两个整数 m 和 n (0 < m, n < 100 ),分别为顶点数量和边的数量。
之后有 n 行数据,每行两个正整数,表示边的起点和终点对应的顶点编号。
每行的数据之间用空格隔开
输出格式
输出共有 m 行,每行有 m 个整数,为题目要求的序列。
整数之间用 1 个空格分开。
样例输入
5 6
1 2
1 3
1 5
2 4
3 5
4 5
样例输出
1 5 4 2 3
2 4 5 3 1
3 5 4 2 1
4 5 3 1 2
5 4 2 1 3
#include <bits/stdc++.h>
using namespace std;
int a[101][101];
int vi[101];
bool flag;
int m;
int dfs(int cur)
{
cout<<cur<<" ";
for(int i=m;i>=1;i--)
{
if(a[cur][i]==1 && !vi[i])
{
vi[i]=1;
dfs(i);
}
}
}
int main()
{
int n;
cin>>m>>n;
int u,v;
for(int i=1;i<=n;i++)
{
cin>>u>>v;
a[u][v]=1;
a[v][u]=1;
}
for(int i=1;i<=m;i++)
{
memset(vi,0,sizeof(vi));
vi[i]=1;
dfs(i);
cout<<endl;
}
return 0;
}