球队“食物链" JAVA版

dfs+剪枝,向下一层探索前判断是否还存在战胜T1的队伍即可
import java.util.Scanner;
public class Main {
static String reuslt;
static int N;
static int flag=0;
static int[][] map = new int[21][21];
static int[] visited = new int[21];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String tmp;
N=in.nextInt();
in.nextLine();
for(int i=1;i<=N;i++) {
tmp = in.nextLine();
for(int j=1;j<=N;j++) {
if(tmp.charAt(j-1)=='W')map[i][j]=1;
if(tmp.charAt(j-1)=='L')map[j][i]=1;
}
}
for(int i=1;i<=N;i++) {
if(flag==1) break;
visited[i]=1;
dfs(i,i,1,i+"");
visited[i]=0;
}
if(flag==1) System.out.println(reuslt);
else System.out.println("No Solution");
}
private static void dfs(int first, int now, int cnt, String tmp) {
if(flag==1)return;
if(cnt==N) {
if(map[now][first]==1) {
flag=1;
reuslt=tmp;
}
return;
}
boolean f = false;
for(int i=1;i<=N;i++) {
if((visited[i]==0&&map[i][first]==1)||map[now][first]==1) {
f=true;
break;
}
}
if(!f)return;
for(int i=1;i<=N;i++) {
if(map[now][i]==1&&visited[i]==0) {
visited[i]=1;
dfs(first, i, cnt+1, tmp+" "+String.valueOf(i));
visited[i]=0;
}
}
}
}