C语言实现关于八皇后的问题!急.....

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:05:20
设计程序完成如下要求:在8×8的国际象棋棋盘上,放置8个皇后,使得这8个棋子不能互相被对方吃掉。要求:(1)依次输出各种成功的放置方法。(2)最好能画出棋盘的图形形式,并在其上动态地标注行走的过程。(3)程序能方便地移植到其他规格的棋盘上。从第一行起逐行放置皇后,每放置一个皇后均需要对第1,2,…,8列进行试探,并尽可能取小的列数。若当前试探的列位置是安全的,则将该行的列位置保存在栈中,然后继续在下一行寻找安全位置,若当前试探的列位置不安全,则用下一列试探;当8列位置试探完毕都未找到安全位置时,就退栈回溯到上一行,修改栈顶保存的皇后位置,然后继续试探。要求能在VC6.0正确运行!把有关注释写清楚!写出其源代码!!!!谢谢.....
能不能说说你们的算法的思想?怎么想的!!我不是太明白!!谢谢。。。。

【【一共有92个解 通过测试的了 如果你要写好的C程序 告诉我你的邮箱 我给你发过去 你直接用就是了】】
#include "stdio.h"
#include "stdlib.h"
#define QUEEN 8
int count = 0; //用于计算解集数量

/*
a[i] = j
表示在棋盘上第i行第j列放有一个棋子
*/

/* 输出N皇后问题的解
输入:
a[]
保存棋子信息的数组.

length
数组的长度 八皇后即为8
*/

void output (int a[],int length){
int i ,j;
count ++;
printf("The %d of the solution is :\n",count);
for(i =0;i<length;i++){
for(j= 0;j<length;j++)
printf("%d",a[i]==j?1:0);
printf("\n");
}
}

void check(int a[],int length,int off){
int i = 0;
int value;

/*如果off和长度相等,说明棋子已经放好了,输出*/

if(off == length){
output(a,length);
return;
}

/* 从0 到length-1表示依次在棋盘的第off行,第value列上放置棋子*/

for(value = 0;value<length;value++){

/*校验*/
for(i =