L3-015 球队“食物链” (30分)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int maxn = 1e3 + 10;
int n,f=0;
int a[25][25]={0},b[25]={0},c[25];
void dfs(int x,int l){
if (f) return ;
c[l]=x,b[x]=1;
if (l==n){
if (a[x][1]) f=1;
return ;
}
int flag=1;
for (int i = 1; i <=n; ++i)
if (!b[i]&&a[i][1]) flag=0;
if (flag) return;
for (int i = 1; i <=n; ++i)
if (a[x][i]&&!b[i]) b[i]=1,dfs(i,l+1),b[i]=0;
}
void solve() {
cin>>n;
for (int i = 1; i <=n; ++i)
for (int j = 1; j <=n; ++j) {
char c;
cin>>c;
if (c=='W') a[i][j]=1;
if (c=='L') a[j][i]=1;
}
dfs(1,1);
if (f) for(int k = 1; k <= n; ++k) cout << c[k]<<(k < n?" ":"");
else cout<<"No Solution";
}
int main() {
int _ = 1;
while (_--) {
solve();
}
return 0;
}