#include<iostream>
#include<queue>
using namespace std;
const int MaxLen=20;
bool Visit[MaxLen]; //记录节点是否被访问
int Matrix[MaxLen][MaxLen];//邻接矩阵
int Vexnum;//记录节点的数量
void DFS(int v)
{
int i;
Visit[v]=true;
cout<<v<<‘ ‘;
for(i=0;i<Vexnum;i++)
if(Matrix[v][i]==1)
{
if(!Visit[i])
DFS(i);
}
}
void BFS(int v)
{
int u,i;
queue<int> Q;
Visit[v]=true;
cout<<v<<” “;
Q.push(v);//将第一个为访问的简单压入队列
while(!Q.empty())
{
u=Q.front(); //取出队列里的第一个节点
Q.pop();
for(i=0;i<Vexnum;i++) //然后将该节点的相邻节点放入数组里
if(Matrix[u][i]==1)
{
if(!Visit[i])
{
Visit[i]=true;
cout<<i<<‘ ‘;
Q.push(i);
}
}
}
}
void SetMatirx(int vnum,int mx[MaxLen][MaxLen]) //初始化邻接矩阵,节点数量,以及记录节点是否被访问的数组
{
int i,j;
Vexnum=vnum;
for(i=0;i<vnum;i++)
{
Visit[i]=false;
for(j=0;j<vnum;j++)
{
Matrix[i][j]=mx[i][j];
}
}
BFS(0); //调用的、广度遍历函数
DFS(0);//调用深度遍历函数
cout<<endl;
}
int main()
{
int t,n;
cin>>t;
int i,j,ma[20][20];
while(t–)
{
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>ma[i][j];
SetMatirx(n,ma);
}
return 0;
}