#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 w,i,k;
Visit[v]=true;
cout<<v<<‘ ‘;
int* AdjVex=new int[Vexnum];//记录当前节点的相邻的节点
for(i=0;i<Vexnum;i++)
AdjVex[i]=-1;
k=0;
for(i=0;i<Vexnum;i++)
if(Matrix[v][i]==1)
{
AdjVex[k++]=i;
}
w=AdjVex[i=0];
while(w!=-1)
{
if(!Visit[w])
DFS(w);
w=AdjVex[++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];
}
}
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;