java:八皇后问题解题思路

Python016

java:八皇后问题解题思路,第1张

递归

首先每一行放置均会循环,也就是每一行的皇后都会被依次放置在8个位置上;

1)第一行在第一个位置上放置1枚皇后;

2)第二行在第一个位置上放置皇后,如果与已有的皇后不在一条直线上,则进入下一行,否则位置+1

3)余下几行均依照步骤2)的方法进行放置,当最后一行放置好,打印输出;

可以写个函数,EightQueen(int

n,

int

*Pos),其中n表示第几行,Pos指向一个数组,Pos[i]=j表示第i行的位置是j;EightQueen(int

n,

int

*Pos)从n=1开始递归,到n=8递归结束。

代码就不写了,没写过java,写不来

public class Queen{//同栏是否有皇后,1表示有private int[] column//右上至左下是否有皇后private int[] rup//左上至右下是否有皇后private int[] lup//解答private int[] queen//解答编号private int numpublic Queen(){column=new int[8+1]rup=new int[(2*8)+1]lup=new int[(2*8)+1]for(int i=1i<=8i++)column[i]=0for(int i=1i<=(2*8)i++)rup[i]=lup[i]=0 //初始定义全部无皇后 queen=new int[8+1]} public void backtrack(int i){if(i>8){showAnswer()}else{for(int j=1j<=8j++){if((column[j]==0)&&(rup[i+j]==0)&&(lup[i-j+8]==0)){//若无皇后queen[i]=j//设定为占用column[j]=rup[i+j]=lup[i-j+8]=1backtrack(i+1) //循环调用column[j]=rup[i+j]=lup[i-j+8]=0}}}} protected void showAnswer(){num++System.out.println("\n解答"+num)for(int y=1y<=8y++){for(int x=1x<=8x++){if(queen[y]==x){System.out.print("Q")}else{System.out.print(".")}} System.out.println()}} public static void main(String[]args){Queen queen=new Queen()queen.backtrack(1)}}