题目描述
读入一个用邻接矩阵存储的无向图,输出它的宽度优先遍历序列。
输入格式
第1行1个正整数n,表示图中顶点数,2≤n≤100;
接下来的n行是一个nxn的邻接矩阵,a[i][j]=1表示顶点i和顶点j之间有直接边相连,a[i][j]=0表示没有直接边相连。保证i=j时,a[i][j]=0,并且a[i][j]=a[j][i]。
输出格式
输出1~n的某一种排列,表示从顶点1开始,对该图进行宽度优先遍历得到的顶点序列,每两个数之间用一个“-”分隔。
样例
input
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
output
1-2-3-4-5-7-8-6
#include<bits/stdc++.h>
using namespace std;
int a[102][102],q[102],f[102];//q表示队列
int main() {
int n;//n记录元素是否在数组中
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)//输入图的邻接矩阵
cin>>a[i][j];
cout<<1;
q[1]=1,f[1]=1;
int head=1,tail=1;
while(head<=tail) {
int ans=q[head];
for(int i=1; i<=n; i++)
if(a[ans][i]&&!f[i]) {
cout<<"-"<<i;
q[++tail]=i;//入队
f[i]=1;//标记
}
head++;//更新head
}
return 0;
}