杨俊cumt

导航

八皇后问题

//定义变量,正对角线pDiagonal,反对角线nDiagonal,列column,用来记录该列 ,对角线 是否可用

  int[] pDiagonal = new int[15];

  int[] cDiagonal = new int[15];

  int[] column = new int[8];

  int[][] result = new int[8][8];

//j是当前的行数

public void queenResolve(int i){

  if(i == 7){//n从0 开始

    for(int[] k : result ){

      for(int p : k)

        System.out.print(p+" ");  

      System.out.println();

    }

  }

  else{

    //看当前行的每一个列位置是否可用

    for(int j = 0,j<8;j++){

      if(column[j]==0&&pDiagonal[i+j]==0&&nDiagonal[j-i+7]){

        //放皇后

        result[i][j] = 1 ;

        //将列和对角线上的位置设为不可用

        column[j]=1;
        pDiagonal[i+j]=1;

        nDiagonal[i+j]=1;

        //放完这个位置接着放下一行

        queenResolve(i+1);

        //失败了,回溯

        result[i][j] = 0;

        column[j]=0;
        pDiagonal[i+j]=0;

        nDiagonal[i+j]=0;

      }//end if

    }//end for

  }end else

}

posted on 2010-09-11 15:48  杨俊cumt  阅读(111)  评论(0编辑  收藏  举报