发布时间:2019-07-31 21:49:16
求C++中的八皇后问题的二维数组解法源代码,题目如下:要在国际象棋的棋盘中放置八个皇后,使任意两个皇后不能互相吃(皇后能吃同一行、同一列、同一对角线的任意棋子),请输入这八个皇后的平面坐标.
这个随便找本教程都有的(经典的算法问题了)
#include <stdio.h>#include <math.h>void NQueens(int m);bool canplace(int t);void print();#define N 8int Array[9]={0};int sum=0;int main(){
NQueens(1); return 0;}void NQueens(int m){
if(m>N) { sum++; print(); } else for(int i=1;i<=N;i++) { Array[m]=i; if(canplace(m)) NQueens(m+1); }}void print(){ int i,j; printf("No %d:\n",sum); for(i=1;i<=N;i++) { for(j=1;j<=N;j++) { if(Array[i]==j) printf("A"); else printf("."); } printf("\n"); }}bool canplace(int t){ for(int i=1;i<t;i++) if(Array[i]==Array[t]||abs(t-i)==abs(Array[t]-Array[i])) return false; return true;}