八皇后问题程序设计

来源:百度知道 编辑:UC知道 时间:2024/06/19 00:47:08
题目内容描述
要求在8*8的国际棋盘上放入八个皇后,使任意两个皇后不能处于同一行、同一列、同一条斜线上。
应用程序功能的详细说明:
此应用程序运用回溯法完成了八皇后问题的92中摆放方式。在Turbo C中,通过图形标准函数实现图形的存取。此程序的图形操作包括在屏幕上画矩形,画皇冠,画棋盘,填充颜色,设置显的字体、方向、大小,比例显示。在此基础上完成八皇后的动态实现:八个皇后在棋盘上不停的跳动,当找到一组合适的解即任意两个皇后没有处在同一行、同一列、同一斜线时;显示的字符串加一并且屏幕停止跳动,此时屏幕上是一组皇后摆放正确的图形,按下键盘上任意键继续寻找解,直到找出所有的解,程序结束。

#i nclude "stdio.h"

static char Queen[8][8];
static int a[8];
static int b[15];
static int c[15];
static int iQueenNum=0; //记录总的棋盘状态数

void qu(int i); //参数i代表行

int main()
{
int iLine,iColumn;

//棋盘初始化,空格为*,放置皇后的地方为@
for(iLine=0;iLine<8;iLine++)
{
a[iLine]=0; //列标记初始化,表示无列冲突
for(iColumn=0;iColumn<8;iColumn++)
Queen[iLine][iColumn]='*';
}

//主、从对角线标记初始化,表示没有冲突
for(iLine=0;iLine<15;iLine++)
b[iLine]=c[iLine]=0;

qu(0);
return 0;
}

void qu(int i)
{
int iColumn;

for(iColumn=0;iColumn<8;iColumn++)
{
if(a[iColumn]==0&&b[i-iColumn+7]==0&&c[i+iColumn]==0) //如果无冲突
{
Queen[iColumn]='@'; //放皇后
a[iColumn]=1; //标记,下一次该列上不能放皇后
b[i-iColumn+7]=1; //标记,下一次该主对角线上不能放皇后
c[i+iColumn]=1; //标记,下一次该从对角线上不能放皇后
if(i<7) qu(i+1); //如果行还没有遍历完,进入下一行
else //否