题目描述
代码框架如下:
输入
第一行输入t,表示有t个测试实例
第二行输入n,表示第1个图有n个结点
第三行起,每行输入邻接矩阵的一行,以此类推输入n行
第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开
以此类推输入下一个示例
输出
每行输出一个图的广度优先搜索结果,结点编号之间用空格隔开
样例输入
2
4
0 0 1 1
0 0 1 1
1 1 0 1
1 1 1 0
5
0 0 0 1 1
0 0 1 0 0
0 1 0 1 1
1 0 1 0 0
1 0 1 0 0
样例输出
0 2 3 1
0 3 4 2 1
#include<bits/stdc++.h> using namespace std; const int MaxLen=20; class Map { private: bool Visit[MaxLen]; int Matrix[MaxLen][MaxLen]; int Vexnum; void BFS(int v) { int w, u; int i, k; int *AdjVex= new int [MaxLen]; queue<int> q; for(i= 0; i< Vexnum; i++) Visit[i]= false; for(v= 0; v< Vexnum; v++) { if(!Visit[v]) { Visit[v]= true; q.push(v); while(!q.empty()) { u= q.front(); cout<<u<<' '; q.pop(); for(i= 0; i< MaxLen; i++) AdjVex[i]= -1; k=0; for(i= 0;i<Vexnum;i++) if(Matrix[u][i]) AdjVex[k++]=i; i= 0; for(w= AdjVex[i]; w>= 0; w= AdjVex[i++]) if(Visit[w]== false) { Visit[w]= true; q.push(w); } } } } } public : void SetMatrix(int vnum,int mx[MaxLen][MaxLen]) { int i,j; Vexnum=vnum; for(i=0;i<MaxLen;i++) for(j=0;j<MaxLen;j++) Matrix[i][j]=0; for(i=0;i<Vexnum;i++) for(j=0;j<Vexnum;j++) Matrix[i][j]=mx[i][j]; } void BFSTraverse() { BFS(0); } }; int main() { int t; cin>>t; while(t--) { int n,i,j; cin>>n; int a[MaxLen][MaxLen]; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>a[i][j]; Map map; map.SetMatrix(n,a); map.BFSTraverse(); cout<<endl; } }