描述
在 n*n 的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后(任两个皇后都不能处于同一条横行、纵行或斜线上)
输入
输入有多组(直到-1结束)
每组一行 一个整数 n(0 每组测试数据间输出一个换行。 对于每组数据,如果存在一个棋谱(使得n个皇后不会相互攻击),先输出这是第几种棋谱,然后输出该棋谱。当全部棋谱都输完时,最后输出该组总共摆放的棋谱数。 欢迎分享,转载请注明来源:内存溢出
import java.util.Scanner;//
class main {
int[] eq=new int[11];//下标表示行,对应的值表示列
static int count=0;
public static void main(String[] args){
main solution=new main();
Scanner myscanner=new Scanner(System.in);
int flag=0;
while(myscanner.hasNext()){
int times=myscanner.nextInt();
if(times==-1)
break;
if(flag!=0)
System.out.println();
solution.findways(times,0);
System.out.println("There are "+count+" kinds of");
count=0;
flag++;
}
}
public boolean judge(int line){//遍历列数,行与行的差和列与列的差相等说明在同一条对角线
for(int i=0;i
return false;
}
}
return true;
}
public void print(int times,int[] map){
int n=0;
count++;
System.out.println("case"+count+":");
for(int i=0;i
for(int j=0;j
if(flag!=0)
System.out.print(" ");
System.out.print("1");
}
else{
if(flag!=0)
System.out.print(" ");
System.out.print("0");
}
flag++;
}
System.out.println();
n++;
}
}
public void findways(int n,int line){
if(n==line){
print(n,eq);
}
else{
for(int i=0;i
if(judge(line)){
findways(n,line+1);
}
}
}
}
}
评论列表(0条)