八皇后乃至N皇后问题
来源:互联网 发布:美萍软件价格 编辑:程序博客网 时间:2024/05/16 06:32
西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八
个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问
题来讲解程式设计之技巧。
解决思路:
1维数组szResult[i]依次表示第i行对应的皇后的所在的列。
采用遍历方式
第i行皇后所在的列从0到N
分别判断 此时是否出现重复现象,如果重复则无需继续遍历,如果不重复则遍历i+1行
直到遍历完所有的行
#include <stdio.h>
#include <string>
/*
using namespace std;
*/
#define QUEEN_CNT 8
int szResult[QUEEN_CNT]={0};
int g_iRetCnt =0;
void PrintRet()
{
g_iRetCnt++;
printf("结果%d:\r\n",g_iRetCnt);
for (int i = 0 ;i < QUEEN_CNT;i++)
{
printf("%d",szResult[i]);
}
printf("\r\n");
}
/*
肯定不在同一行
*/
bool IsSafe(int iIndex,int iVal)
{
for (int i =0; i < iIndex; i++)
{
if (szResult[i] == iVal ||
iIndex + szResult[i] == iVal + i
||iIndex +iVal == szResult[i] +i)
{//判断是否在同一列 对角线
return false;
}
}
return true;
}
void Check(int iIndex)
{
for (int i = 0; i< QUEEN_CNT; i++)
{
if (!IsSafe( iIndex, i))
{
continue ;
}
szResult[iIndex] = i;
if (iIndex == QUEEN_CNT -1 )
{
PrintRet();
}
else
{
Check(iIndex+1);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Check(0);
getchar();
return 0;
}
- 八皇后乃至N皇后问题
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 八皇后问题(N皇后问题)
- 八皇后问题—>n皇后问题
- 八皇后及n皇后问题
- 八皇后及n皇后问题
- 八皇后及N皇后问题
- 八皇后、N皇后问题的求解。
- 八皇后及n皇后问题
- N-Queens八皇后问题
- 八皇后问题、N皇后问题回溯法详解
- 八皇后问题(扩展:N皇后问题)
- 八皇后问题、N皇后问题回溯法详解
- 从八皇后问题到n皇后问题(leetcode)
- SICP 2.42 “八皇后问题”及“n皇后问题”
- 面试题:八皇后问题(N皇后问题)
- 从八皇后问题到2n皇后问题
- jQuery最佳实践
- 检测内存泄露
- MinGW GCC下sleep()函数问题
- Canvas画弧线方法(不知道的时候自己设计算法,结果一个悲剧啊。)
- 毕业多年拉开差距的原因
- 八皇后乃至N皇后问题
- E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/cn.arch
- Oracle基础(二):表管理
- vs2008+sp1
- Windows Server 2008 R2功能差异
- UML看的书籍
- iOS framework 制作教程,这次不是静态包!!!
- 删掉重复的数据
- 11月热门下载资源TOP100强力推荐!