码迷,mamicode.com
首页 > 其他好文 > 详细

八皇后问题的后续更新

时间:2018-05-28 21:12:48      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:include   def   board   for   oid   define   amp   --   main   

在一个c文件中实现八皇后的问题:

#include<stdio.h>


#define EIGENT 8


bool isSafe(int (*chessboard)[EIGENT],const int row, const int col);
void orderQueen(int(*chessboard)[EIGENT],const int row);
void drawChessboard(int(*chessboard)[EIGENT]);

bool isSafe(int (*chessboard)[EIGENT],const int row, const int col){
    int i;
    int j;
    
    for(i = row -1,j = col - 1;i >= 0 && j >= 0;i--,j--){
        if(chessboard[i][j] == 1){
            return false;
        }
    }
    for(i = row - 1,j = col;i >= 0;i--){
        if(chessboard[i][j] == 1){
            return false;
       }
   }
  for(i = row - 1,j = col + 1;i >= 0 && j < EIGENT; i-- , j++){
          if(chessboard[i][j] == 1){
            return false;
          }
  }
  return true;
}

void orderQueen(int(*chessboard)[EIGENT],const int row){
    static int count = 0;
    if(row >= EIGENT){
        ++count;
        drawChessboard(chessboard);
    }else{
        int col;

        for(col = 0; count < 23  && col < EIGENT;col++){           //输出23种结果!

            chessboard[row][col] = 1;
            if(isSafe(chessboard,row,col)){
                orderQueen(chessboard,row + 1);
            }
            chessboard[row][col] = 0;
        }
    }
}

void drawChessboard(int(*chessboard)[EIGENT]){
    int row;
    int col;
    
    static int count = 0;
    
    printf("第%d个解:\n",++count);
    for(row = 0; row < EIGENT; row++) {
        for(col = 0; col < EIGENT; col++) {
            printf("%2d", chessboard[row][col]);
        }
        printf("\n");
    }
}

int main(){
    int chess[EIGENT][EIGENT] = {0};
    orderQueen(chess,0);
    return 0;
}


八皇后问题的后续更新

标签:include   def   board   for   oid   define   amp   --   main   

原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9102117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!