1、八皇后问题 问题描述在88的国际象棋棋盘上,放置8个皇后,使得这8个棋子不能互相被对方吃掉。 设计思路在第一行先放置好一个皇后,然后在第二行放置第二个皇后,在放置第二个皇后的时候要进行判断,判断第二个皇后是否与第一个皇后同列,是否在同一条斜线上面,放置好第二个皇后跳转至第三行,放置第三个皇后的方法与放置第二个皇后的方法相同,可以使用递归函数,直至放好第八个皇后。 数据结构设计在放置好第一、二个皇后之后,放置后面皇后的时候方法与放置第二个皇后的方法相同,此时使用了递归函数。 功能函数设计void show() /图形化输出棋盘int check(int n) /检测放置的位置是否合法,满足条件返
2、回1,否则返回0void put(int n) /在第n行放置第n 个皇后 程序代码#include#include#include#include#define N 8 /皇后数=棋盘行列数int aN; /ai为第i 行皇后所在列void show() /图形化输出int i;int flag=0,K;int p,q ;int bNN=0;static int t=1;printf(“第%d 个解为: “,t+);for(i=0;iN;i+)biai=1;printf(“(%d,%d) “,i,ai);printf(“n“);if(flag=0)for(p=0;pN;p+)for(q=0;
3、qN;q+)if(bpq=1)printf(“ “);elseprintf(“ “); printf(“n“);flag=1;printf(“按任意数字键显示下一个解: “);scanf(“%d“,int check(int n) /满足条件返回1,否则返回0int i;for(i=0;in;i+)if(ai=an|fabs(n-i)=fabs(ai-an) /判断 return 0;return 1;void put(int n) /在第n行放置第n 个皇后int i;if(n=N)return ;for(i=0;iN;i+)an=i;if(check(n) /位置合法if(n=N-1) /皇后全部放置完毕show();elseput(n+1);int main ()printf(“八皇后问题求解: n“);put(0);return 0; 运行与测试八皇后的输出采用了坐标法和图形法,如下图: