Translate
给你n,代表有0 n-1个人,给你n行,每行n个字符,
字符是X,i=j就是这个人在这个位置
1 代表,i人能赢j人当king
0代表输;
游戏规则是b 是king a能赢b a当king
问裁判按什么安排顺序0能当king
//#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
using namespace std;
vector<int> mp[1111];
char str[1111][1111];
int vis[1111],ans[1111];
int f = 0, n,k;
void dfs(int u, int cnt)
{
if (k == n - 1)
{
f = 1;
return;
}
for (int i = 0; i < mp[u].size(); i++)
{
if (!vis[mp[u][i]])
{
vis[mp[u][i]] = 1;
ans[k++] = mp[u][i];
dfs(mp[u][i], cnt++);
}
}
return;
}
int main()
{
int i, j;
while (cin >> n)
{
//
memset(vis, 0, sizeof(vis));
for (i = 0; i < 1011; i++)
mp[i].clear();
f = 0;
k = 0;
//
for (i = 0; i < n; i++)
{
getchar();
for (j = 0; j < n; j++)
{
scanf("%c", &str[i][j]);
if (str[i][j] == '1')
mp[i].push_back(j);
}
}
vis[0] = 1;
dfs(0, 0);
if (!f)
puts("impossible");
else
{
for (int i = k-1; i>=0; i--)
printf("%d ", ans[i]);
puts("0");
}
}
return 0;
}