八皇后的后宫战(我是观战打酱油的)
来源:互联网 发布:苹果mac装win7系统好吗 编辑:程序博客网 时间:2024/04/27 14:54
/*高斯在1850年提出:在8X8格的棋盘上摆放八个皇后
*使其不能互相攻击,即任意两个皇后都不能处于同一
*行、同一列或同一斜线上,问:共有多少种摆法。
*/
//全局变量
#include <stdio.h>
#include <math.h>
int a[9] = {100};
int count = 0;
//判断第i行第value列放值是否正确
int Place(int i, int value)
{
int j;
if(i == 1) //第一行先放,所以肯定不会有冲突位置,放哪都合适
return 1; //直接去告诉长官你找到位置站好了,让他去安排下一行吧
for(j = 1; j < i; j++){
if(a[j] == value) //循环检测当前行第value列在之前是否在之前有皇后上位过
return 0;
if(abs(i - j) == abs(value - a[j])) /*还要预防斜线上也有皇后在埋伏你。
*abs()函数是求绝对值的,但是在这可以
*用来判断value是否等于以j为基点延出两
*条对角线至本行相交于两点的值,即value
*在不在皇后对应点的斜线上.
*/
return 0;
}
return 1;
}
//显示结果
void ShowResult()
{
int i, j;
for(j = 1; j <= 8; j++){
for(i = 1; i < a[j]; i++){
printf("* ");
}
//打印每一行中皇后的位置a[j]
printf("Q");
for(i = i+1; i <= 8; i++){
printf("* ");
}
putchar(10);
}
}
//进行递归回溯
void Backtrack(int t)
{
int i;
//找出一次解,打印图案一次
if(t > 8){
puts("******************************\n");
ShowResult();
count++;
return;
}
else{
for(i = 1; i <= 8; i++){
if(Place(t, i)) //循环判断当前第t行的第i列位置是否合适
{
a[t] = i; //在当前行找到合适位置后a[行数] = 列数
Backtrack(t + 1); //继续递归找下一行皇后合适的位置
}
}
}
}
//输出八皇后问题解的个数
void ShowCount()
{
printf("八皇后问题共有%d个解!\n", count);
}
//主函数
void main()
{
Backtrack(1);
ShowCount();
}
*使其不能互相攻击,即任意两个皇后都不能处于同一
*行、同一列或同一斜线上,问:共有多少种摆法。
*/
//全局变量
#include <stdio.h>
#include <math.h>
int a[9] = {100};
int count = 0;
//判断第i行第value列放值是否正确
int Place(int i, int value)
{
int j;
if(i == 1) //第一行先放,所以肯定不会有冲突位置,放哪都合适
return 1; //直接去告诉长官你找到位置站好了,让他去安排下一行吧
for(j = 1; j < i; j++){
if(a[j] == value) //循环检测当前行第value列在之前是否在之前有皇后上位过
return 0;
if(abs(i - j) == abs(value - a[j])) /*还要预防斜线上也有皇后在埋伏你。
*abs()函数是求绝对值的,但是在这可以
*用来判断value是否等于以j为基点延出两
*条对角线至本行相交于两点的值,即value
*在不在皇后对应点的斜线上.
*/
return 0;
}
return 1;
}
//显示结果
void ShowResult()
{
int i, j;
for(j = 1; j <= 8; j++){
for(i = 1; i < a[j]; i++){
printf("* ");
}
//打印每一行中皇后的位置a[j]
printf("Q");
for(i = i+1; i <= 8; i++){
printf("* ");
}
putchar(10);
}
}
//进行递归回溯
void Backtrack(int t)
{
int i;
//找出一次解,打印图案一次
if(t > 8){
puts("******************************\n");
ShowResult();
count++;
return;
}
else{
for(i = 1; i <= 8; i++){
if(Place(t, i)) //循环判断当前第t行的第i列位置是否合适
{
a[t] = i; //在当前行找到合适位置后a[行数] = 列数
Backtrack(t + 1); //继续递归找下一行皇后合适的位置
}
}
}
}
//输出八皇后问题解的个数
void ShowCount()
{
printf("八皇后问题共有%d个解!\n", count);
}
//主函数
void main()
{
Backtrack(1);
ShowCount();
}
阅读全文
0 0
- 八皇后的后宫战(我是观战打酱油的)
- 打酱油的面试
- 打酱油的日子
- 我来打酱油的
- 嘿嘿,来打酱油的
- 二战中真实的打酱油船
- 打了一天的酱油了
- 打酱油的日子好与坏
- 周一又是打酱油的一天
- 八皇后的题目
- 八皇后的解法
- 八皇后的问题
- 八皇后的问题
- 八皇后的问题
- `## 八皇后的判断 ###
- ZZY的八皇后
- czy的后宫
- 我的奥运观战指南
- Add to List 374. Guess Number Higher or Lower
- 几种简单的随机数算法
- CHROME开发者工具的小技巧【代码格式化、强制DOM、动画、直接编辑、网络限速、复制HTTP请求、抓图】
- startActivityForResult和setResult详解
- Node.js的安装、调试
- 八皇后的后宫战(我是观战打酱油的)
- oracle视图
- PHP坑之:有序数组合并
- C语言实验:输入一个整数的小写金额值,转化为大写金额值并输出
- wpf写的一个日历
- hdu 6165
- 第二十天
- js实现回到顶部
- 数据链路层