八皇后求解(转)
来源:互联网 发布:mac图片处理软件 编辑:程序博客网 时间:2024/04/29 06:28
方案一:
#include<stdio.h>
int s[8]={0}; /*记录竖行是否已放子*/
int left[17]={0}; /*记录左斜行是否已放子*/
int right[17]={0};/*记录右斜行是否已放子*/
int a[8][8]={0};
int k=0;/*记录有多少种解*/
/*-------------------------打印八皇后-------------------------------*/
void Printqueen(int k)
{
int i,j;
FILE *pt; /*写入文件*/
pt=fopen("queen.txt","a");
printf("/n-----NO.%d-----/n",k);
fprintf(pt,"/n-----NO.%d-----/n",k);
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
printf("%2d",a[i][j]);
fprintf(pt,"%2d",a[i][j]);
}
printf("/n");
fprintf(pt,"/n");
}
fclose(pt);
}
/*------------------------求解八皇后---------------------------------*/
void buildqueen(int j)
{
int i;
for(i=0;i<8;i++) {
if(s[i]==0&&left[j-i+7]==0&&right[j+i]==0) { /*所在的竖,斜行还没有放过则可放*/
a[j][i]=1;
left[j-i+7]=1;right[j+i]=1; /*放置并标志*/
s[i]=1;
if(j<7) buildqueen(j+1); /*最后一行不用再调用了*/
if(j==7) { /*最后一行都能成功放,则得到一种解,则打印出来*/
k++;
Printqueen(k);
}
a[j][i]=0; /*取消这个位置,找下一位置*/
left[j-i+7]=0;right[j+i]=0;
s[i]=0;
}
}
}
/*-------------------------main()------------------------------------*/
void main()
{
buildqueen(0);
getch();
}
方案二
#include "stdio.h"
int count;
int queen [10], column[20],left[20],right[20];
void prt1()
{
int j;
printf("No.%d ",++count);
for (j=1;j<=8;j++)
printf("%3d",queen[j]);
printf("/n");
}
void try(int i)
{
int j;
for (j=1;j<=8;j++)
if (column[j] && left[i-j+8] && right[i+j])
{
queen[i]=j;
column[j]=0;
left[i-j+8]=0;
right[i+j]=0;
if (i<8) try(i+1);
else prt1();
column[j]=left[i-j+8]=right[i+j]=1;
}
}
main()
{
int i;
for (i=1;i<=16;i++)
column[i]=left[i]=right[i]=1;
count=0;
try(1);
getch();
}
- 八皇后求解(转)
- 八皇后求解方法(递归求解)
- 八皇后问题求解
- 求解八皇后问题
- 八皇后问题求解
- 八皇后问题求解
- 八皇后问题求解
- 八皇后问题求解
- 八皇后递归求解
- 八皇后问题求解
- 八皇后求解
- 递归求解八皇后
- 八皇后问题求解
- 八皇后(转)
- C#递归求解八皇后
- 八皇后问题求解1
- 八皇后问题求解2
- 八皇后递归求解问题
- x86, x64
- csdn
- 2009-12-01
- 毕业5年决定你的命运
- 什么是软件性能测试
- 八皇后求解(转)
- 2009年12月1日(mysql_6)
- 一个Java程序员应该掌握的10项技能
- 对大家一生有帮助的4节课
- 软件性能的几个主要术语
- struts+hibernate项目debug总结(转)
- 二进制指数退避算法
- ThinkPHP框架学习视频教程下载
- 北航CSDN高校俱乐部