【Acm】八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。
其解决办法和我以前发过的【算法之美—Fire Net:www.cnblogs.com/lcw/p/3159414.html】类似
题目:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
#include <stdio.h> int count = ; //全局变量,统计所有解法 int notDanger( int row, int j, int (*chess)[] ) //判断是否存在危险
{
int i, k, flag1=, flag2=, flag3=, flag4=, flag5=; // 判断列方向
for( i=; i < ; i++ )
{
if( *(*(chess+i)+j) != )
{
flag1 = ;
break;
}
} // 判断左上方
for( i=row, k=j; i>= && k>=; i--, k-- )
{
if( *(*(chess+i)+k) != )
{
flag2 = ;
break;
}
} // 判断右下方
for( i=row, k=j; i< && k<; i++, k++ )
{
if( *(*(chess+i)+k) != )
{
flag3 = ;
break;
}
} // 判断左下方
for( i=row, k=j; i>= && k<; i--, k++ )
{
if( *(*(chess+i)+k) != )
{
flag4 = ;
break;
}
} // 判断右上方
for( i=row, k=j; i< && k>=; i++, k-- )
{
if( *(*(chess+i)+k) != )
{
flag5 = ;
break;
}
} if( flag1 || flag2 || flag3 || flag4 || flag5 )
{
return ;
}
else
{
return ;
}
} // 参数 row:表示起始行
// 参数 n:表示列数
// 参数 (*chess)[8]: 表示指向棋盘每一行的指针
void EightQueen( int row, int n, int (*chess)[] )
{
int chess2[][], i, j; for( i=; i < ; i++ )
{
for( j=; j < ; j++ )
{
chess2[i][j] = chess[i][j];
}
} if( == row ) //本次解法完毕
{
printf("第 %d 种 \n", count+);
for( i=; i < ; i++ )
{
for( j=; j < ; j++ )
{
printf("%d ", *(*(chess2+i)+j));
}
printf("\n");
}
printf("\n");
count++;
}
else
{
for( j=; j < n; j++ )
{
if( notDanger( row, j, chess ) ) // 判断这个位置是否存在危险
{
for( i=; i < ; i++ )
{
*(*(chess2+row)+i) = ;
} *(*(chess2+row)+j) = ; EightQueen( row+, n, chess2 ); //没有危险,继续往下
}
}
}
} int main()
{
freopen( "output.txt", "w", stdout ); //将输出结果保存到 output.txt中 int chess[][], i, j; for( i=; i < ; i++ )
{
for( j=; j < ; j++ )
{
chess[i][j] = ;
}
} EightQueen( , , chess ); printf("总共有 %d 种解决方法 \n\n", count); fclose(stdout);
return ;
}
【Acm】八皇后问题的更多相关文章
- ACM:回溯,八皇后问题,素数环
(一)八皇后问题 (1)回溯 #include <iostream> #include <string> #define MAXN 100 using namespace st ...
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- Python解决八皇后问题
最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...
- OpenJudge1700:八皇后问题 //不属于基本法的基本玩意
1700:八皇后问题//搜索 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...
- C#八皇后问题 枚举值
记得刚出道的时候, 有考虑怎么面试, 以及可能会遇到的面试题, 有一个人说了一下 八皇后问题, 据说要用 sql 语句写出来, 暂时我 写了一个C#版本的, 经测验,八皇后算法结果为 92种, 这个与 ...
- 八皇后(dfs+回溯)
重看了一下刘汝佳的白板书,上次写八皇后时并不是很懂,再写一次: 方法1:逐行放置皇后,然后递归: 代码: #include <bits/stdc++.h> #define MAXN 8 # ...
- C语言解决八皇后问题
#include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...
随机推荐
- iOS热更新技术被苹果官方警告?涉及到RN、Weex、JSPatch
本文为转载文章 故事背景: 这两天,不少iOS开发群都炸窝了,原因是部分iOS开发者收到了苹果的警告邮件: 有开发者质疑可能是项目中使用了JSPatch.weex以及ReactNative等热更新技术 ...
- easyui的datagrid分页写法小结
easyui的datagrid分页死活不起作用...沙雕了...不说了上代码 //关闭tab1打开tab2 查询Detail function refundDetail(){ $('#tt').tab ...
- maven常见问题问答(转)
转自:http://www.oschina.net/question/158170_29368 1.前言 Maven,发音是[`meivin],"专家"的 意思.它是一个很好的项目 ...
- DPDK架构与特点(转)
from:http://www.cnblogs.com/mylinuxer/p/4277676.html DPDK架构与特点 当年在某公司实习的时候,当时老大给了我一份DPDK的文档,说是将来很有用, ...
- Mysql5.6 make 错误以及解决办法
1.若make出现类似错误: CMake Error: CMake was unable to find a build program corresponding to "Unix Mak ...
- TestNg的IReporter接口的使用
IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么不 ...
- opencv 摄像头 线程
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h> ...
- 【MySQL】MySQL支持的数据类型
1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3 ...
- stm32开发 - 远离 Keil uVision, 回到 Visual Studio
学了8051单片机, 学了MSP430系列, 终于开始步入正轨, 开始学习 stm32(ARM Cortex-M3)系列微处理器~ 学51用Keil uVision开发环境, 提一下Keil uVis ...
- MongoDB学习笔记(10)-- 排序
MongoDB sort() 方法 在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序 ...