8皇后问题
来源:互联网 发布:什么是淘宝旺旺号啊 编辑:程序博客网 时间:2024/05/22 01:33
8皇后问题
描述:
八皇后问题是大数学家高斯于1850年提出来的。该问题是在8×8的国际象棋棋盘上放置8个皇后,使得没有一个皇后能“吃掉”任何其他一个皇后,即没有任何两个皇后被放置在棋盘的同一行、同一列或同一斜线上。
输出8皇后问题所有结果。
输入:
没有输入。
输出:
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。
输入样例:
输出样例:
输出的前几行:
No 1:
A.......
....A...
.......A
.....A..
..A.....
......A.
.A......
...A....
No 2:
A.......
.....A..
.......A
..A.....
......A.
...A....
.A......
....A...
答案:
#include<stdio.h>
#include<math.h>//要用到绝对值函数
inta[8];
intcounter=1;//计数器
voidsearch(int m); //递归函数
intcanplace(int row,int col);//判断是否满足八皇后的条件
voidoutput();
intmain()
{
search(0);//初始化为0
}
voidsearch(int m)
{
int i;
if(m==8)
{
output();
}
else
{
for(i=0;i<8;i++)
{
if(canplace(m,i))
{
a[m]=i;
search(m+1);
}
}
}
}
intcanplace(int row,int col)
{
int i,flag=1;
for(i=0;i<row;i++)
{
if(a[i]==col||fabs(row-i)==fabs(col-a[i]))
{
flag=0;
break;
}
}
return(flag);
}
voidoutput ()
{
int i,j;
printf("No ");
printf("%d",counter);
printf(":\n");
counter++;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(j==a[i])printf("A");
else printf(".");
}
printf("\n");
}
}
注意:
本题用a[m]=j来表示皇后在第m行第j列,所以输出时一行只有一个皇后,故在canplace中无需再判断
输出时要二重循环才能输出矩阵
a[i]==col 表示同一列的前n-1行中有皇后
fabs(row-i)==fabs(col-a[i])表示在同一斜线上或在同一反斜线上
- 8皇后问题和N皇后问题
- 8皇后问题改进~
- 8皇后问题
- 8皇后问题求解
- 8皇后问题
- 8皇后问题
- 8皇后问题算法
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 8皇后问题
- 【算法】8皇后问题
- 8皇后问题续
- 8皇后问题算法
- 8皇后问题
- 海思--Hi3516aIVE--基础
- Could not autowire. No beans of 'xxxx' type found的错误提示(IntelliJ Idea)
- 数据结构与算法之七(划分算法与快速排序)
- SpringMVC 下载Excel模板和导入数据
- mac下 adb :command not found问题解决
- 8皇后问题
- thinkphp5.0学习(七):数据库操作
- Vue 自定义指令
- python 空格替换
- 回文链表
- hadoop 8088端口网页无法打开的原因分析
- Java后端程序员1年工作经验总结
- windows7环境下Eclipse集成Python开发环境+安装TensorFlow
- dexcachelist导致anr