回溯-八皇后问题
来源:互联网 发布:用什么软件转码快 编辑:程序博客网 时间:2024/05/18 03:07
8 * 8棋盘上有8个皇后,皇后的攻击范围为同行同列对角线,为使她们不相互攻击,给出她们的坐标
#include<cstdio>
#include<cstdlib>
const int SIZE = 8;
int locate[SIZE]; //保存第i行的皇后的列数
int cnt = 0;
void Queen(int cur)
{
if (cur == SIZE) //所有皇后都已定位,输出
{
cnt++;
for (int i = 0; i < SIZE; i++)
printf("(%d,%d) ", i, locate[i]);
printf("\n");
}
else
{
for (int i = 0; i < SIZE; i++) //循环所有列号,寻找没有皇后的列
{
int ok = 1;
for (int j = 0; j < cur; j++) //排除已有皇后的列
if (locate[j] == i)
ok = 0;
if (ok == 1)
{
int ook = 1;
for (int k = 0; k < cur; k++)
if (k - locate[k] == cur - i || k + locate[k] == cur + i) //排除在对角线上的情况
ook = 0;
if (ook == 1)
{
locate[cur] = i;
Queen(cur + 1); //进行下一个皇后的定位
}
}
}
}
}
int main()
{
Queen(0);
printf("%d cases:\n", cnt);
}
#include<cstdio>
#include<cstdlib>
const int SIZE = 8;
int locate[SIZE]; //保存第i行的皇后的列数
int cnt = 0;
void Queen(int cur)
{
if (cur == SIZE) //所有皇后都已定位,输出
{
cnt++;
for (int i = 0; i < SIZE; i++)
printf("(%d,%d) ", i, locate[i]);
printf("\n");
}
else
{
for (int i = 0; i < SIZE; i++) //循环所有列号,寻找没有皇后的列
{
int ok = 1;
for (int j = 0; j < cur; j++) //排除已有皇后的列
if (locate[j] == i)
ok = 0;
if (ok == 1)
{
int ook = 1;
for (int k = 0; k < cur; k++)
if (k - locate[k] == cur - i || k + locate[k] == cur + i) //排除在对角线上的情况
ook = 0;
if (ook == 1)
{
locate[cur] = i;
Queen(cur + 1); //进行下一个皇后的定位
}
}
}
}
}
int main()
{
Queen(0);
printf("%d cases:\n", cnt);
}
0 0
- 八皇后问题 --回溯
- 回溯-八皇后问题
- 八皇后问题 回溯
- 八皇后问题(回溯)
- 八皇后问题 回溯
- 八皇后问题--回溯
- 回溯-八皇后问题
- 递归回溯--八皇后问题
- 回溯算法---八皇后问题
- 回溯算法-八皇后问题
- 八皇后问题 回溯法
- 八皇后问题 回溯法
- 八皇后问题(回溯)
- 八皇后问题(递归回溯)
- 八皇后问题回溯算法
- 八皇后问题 回溯法
- 八皇后问题-回溯法
- 八皇后问题|递归|回溯
- Nginx源码学习资源集
- windows进程间通信常用方法
- adblockplus for chrome代码编译
- 工艺——使用类进行指针转换
- C++文件在安卓上的转移(以NDK为工具)
- 回溯-八皇后问题
- nyoj-苹果
- 我的第一个CSDN博客
- 黑马程序员--oc结构体
- [BestCoder] Round #21 1002 - Formula | HDU 5139
- D - Vanya and Computer Game
- 常用降维方法
- Haskell 与 Applicative Functor
- oracle 11g 64位连接32位PLSQL的方法