球队“食物链" JAVA版
![在这里插入图片描述](https://img-blog.csdnimg.cn/1c67074fe873464bb7557a8f9d42f5bb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASV9hbV9hX1N0cmluZw==,size_20,color_FFFFFF,t_70,g_se,x_16)
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;
}
}
}
}