《八皇后问题的实现(C语言)》由会员分享,可在线阅读,更多相关《八皇后问题的实现(C语言)(3页珍藏版)》请在人人文库网上搜索。
1、八皇后问题的实现(C语言)#include #define N 8 / 定义棋盘的格数, 通过改变,也可以是4皇后, 16皇后, 9皇后什么的.int chessNN = 0; / 棋盘int count = 0; / 有多少种放法int canput(int row, int col) / 确定某一格能不能放int i,j;for(i = 0; i N; i +)if(chessicol = 1) /有 同列的return 0;for(j = 0; j N; j+)if(chessrowj=1) /有同行的return 0;if(i-row)=(j-col)|(i-row)=(col-j)&。
2、chessij=1) / 对角线上有的return 0;return 1;void print_chess() / 打印放置的方案int i, j;for(i = 0; i N; i+)for(j = 0; j N; j+)printf(%d , chessij);printf(n);printf(n);int put(int row) / 放置棋子, row是从哪一行开始, 通常是0int j, s;for(j = 0; j N; j+) / 此一行的每一个格子都要试试能不能放if(canput(row, j) / 假如这格能放的话chessrowj = 1; / 放置if(row = N-。
3、1) / 已经到了最后一行, 那么肯定成功*count = count +1;print_chess();chessrowj = 0; /成功后, 寻找下一种方法continue;s = put(row+1); / 放置下一行的if(s = 0) / 假如下一行不能放chessrowj = 0; / 那么这格是放错了的, 清除continue; / 找本行的下一个方格elsebreak;if(j=N) / 如果这一行的每个空格都不能放置return 0; / 那么本行放置失败elsereturn 1; / 本行放置成功int main()int s ;s = put(0); / 放置printf(the number of put way is %dn, count); /打印信息return 0。