程序员面试题精选100题(58)-八皇后问题

题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法。请求出总共有多少种摆法。

程序员面试题精选100题(58)-八皇后问题

从第一行开始放皇后,那么就不需要判断行是否安全,因为肯定安全,所以只需要判断该列是否安全,而且改对角线是否安全
col[0..7] 用true或者false表示
左对角线right[i+j],因为向左移就要向下移,一加一减总数没变
右对角线left[i-j]--为了避免出现负数 left[i-j+8]

void try(int row){//试第row行
  int col; //循环变量,表示列号
  int tmp; //临时变量
  for(col=1;col<=8;col++){
    if(c[col]&&right[row+col]&&left[row-col+8]){
        list.add(row+" "+col);
        c[col]=false;
        right[row+col]=false;
        left[row-col+8]=false;
        if(row<8){
           try(row+1);
        }else{
         打印list
        }
        c[col]=true;
        right[row+col]=true;
        left[row-col+8]=true;
    }
 } 
}

你可能感兴趣的:(程序员)