数据结构与算法2:八皇后问题
来源:互联网 发布:淘宝男装代理 编辑:程序博客网 时间:2024/05/16 17:26
问题描述:八皇后问题是在一个国际象棋的棋盘上(8乘8)摆放8个皇后,使得相互无法攻击。国际象棋中,皇后的攻击范围是同一行、同一列或者同一对角线上。这个问题总共有92个解(包括对称、旋转都算)。
问题分析:这个问题解法基本上就是尝试不同的情况,留下符合要求的,具体做法很多,这边只是我的做法。考虑到一个事实:每一行有且仅有一个皇后,否则不成立。因此,我们可以把全部的解空间看做一棵树,第i层的情况表示第i行的摆放情况,如此搜索即可。当发现某一种情况不可能时,就不要再往下搜,而是回过头去看。
这个过程思路还是很清楚的,代码倒是边界情况比较不好想,想清楚再写。下面是C语言代码。
#include <stdio.h>int n;int list[8];int total = 0;int isSafe(int line, int pos){int i;if (line == 0)return 1;for (i = 0; i < line; i++){if (list[i] == pos || line-i == pos-list[i] || line-i == list[i]-pos){//printf("fail%d! ", pos);return 0;}}//printf("Safe%d! ", pos);return 1;}void search(int line){int i;//printf("now search %d\n", line);if (line == n){printf("get:");for (i = 0; i < n; i++)printf("%d ", list[i]);printf("\n");total++;}else{for (i = 0; i < n; i++){if (isSafe(line, i)){list[line] = i;search(line + 1);}}}}int main(){printf("n:");scanf("%d", &n);search(0);printf("total:%d\n", total);return 0;}
0 0
- 数据结构与算法2:八皇后问题
- 【数据结构与算法】八皇后问题之递归
- 数据结构与算法笔记 lesson 16 八皇后问题
- 算法与数据结构-回溯法及八皇后问题求解
- 数据结构与算法Java版——八皇后问题
- C++数据结构--回溯算法--八皇后问题
- 《数据结构和算法》之八皇后问题
- 数据结构-八皇后算法
- 八皇后问题与回溯算法
- 八皇后问题与回溯算法
- 八皇后问题[算法]
- 八皇后问题算法
- 算法问题-八皇后
- 算法--八皇后问题
- 算法-八皇后问题
- 算法八皇后问题
- 算法--八皇后问题
- 头疼的算法与数据结构——八皇后问题(递归法)
- Matlab--RMB人民币转换为 繁体字
- iOS Dev (26) 初步了解下UIColor的最常用知识
- sql server 2000 , 检查文件 '...\data\tempdb.mdf' 的扇区大小时遇到意外错误。
- Matlab--最短路问题
- erlang -- timeout 的简单使用
- 数据结构与算法2:八皇后问题
- cocos2dx之场景特效
- linux下编写RTC驱动
- hdu 3998 dp+最大流
- Lua 解释器程序
- HDU3795-最短路径问题-Dijkstra算法
- 能让土豆能自动播放的代码 --- &autoPlay=true
- 查找与排序:利用基数排序对0~100范围内数据实现排序
- sgu157 Patience DFS打表