import java.util.*;
public class Arrange {
static int M[][] = new int[8][8];
static int sum = 0;
static ArrayList<Integer> allArranges = new ArrayList<>();//用来存储所有安排方案
static Integer arrange[] = new Integer[8];//存储当前单个安排方案
static int visited[] = new int[8];//visited[i]的值描述地i个和尚是否被访问过,1表示已被访问,0表示未被访问;
public static void main(String[] args){
Scanner in = new Scanner(System.in);
for(int i=1;i<8;i++){
for(int j=1;j<8;j++){
M[i][j] = in.nextInt();
}
}
in.close();
//初始化
for(int i=1;i<8;i++){
arrange[i]=0;
visited[i]=0;
}
backTrack(1);
//输出方案
System.out.print(sum+"\n");
for(int i=0; i<sum; i++){
for(int j=0; j<7; j++){
System.out.print(allArranges.get(i*7+j)+" ");
}
System.out.println();
}
}
static void backTrack(int t){//用递归来实现回溯,t代表第t天
if(t==8){
for(int i=1; i<8; i++){
allArranges.add(arrange[i]);
}
sum++;
}
else{
for(int i=1;i<8;i++){
if(visited[i]==0 && M[i][t]==1){
arrange[t]=i;
visited[i]=1;
backTrack(t+1);
visited[i]=0;
}
}
}
}
}
挑水
最新推荐文章于 2022-03-24 08:39:54 发布