[数据结构] N皇后问题
2014-04-26 12:52
274 查看
代码:
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int N=100;
int c
;//皇后第i行放在第几列上
int n,total;
int cc;//方法数
void dfs(int cur)
{
if(cur>n)
{
cout<<"第"<<cc++<<"种方法:"<<endl<<endl;
for(int i=1;i<=n;i++)
{
cout<<"第 "<<i<<" 个皇后放在第 "<<i<<" 行的第 "<<c[i]<<" 列上"<<endl<<endl;
}
total++;
return;
}
for(int i=1;i<=n;i++)
{
c[cur]=i;
int ok=1;
for(int j=1;j<cur;j++)
{
if(c[cur]==c[j]||cur-c[cur]==j-c[j]||cur+c[cur]==j+c[j])
{
ok=0;
break;
}
}
if(ok)
dfs(cur+1);
}
}
int main()
{
while(1)
{
cout<<"请输入皇后的个数: "<<endl;
cin>>n;
if(n<=0)
{
cout<<"输入不合法,程序退出!"<<endl;
break;
}
cc=1;
total=0;
dfs(1);
cout<<"总计有"<<total<<"个解"<<endl<<endl;
}
return 0;
}
运行截图:
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int N=100;
int c
;//皇后第i行放在第几列上
int n,total;
int cc;//方法数
void dfs(int cur)
{
if(cur>n)
{
cout<<"第"<<cc++<<"种方法:"<<endl<<endl;
for(int i=1;i<=n;i++)
{
cout<<"第 "<<i<<" 个皇后放在第 "<<i<<" 行的第 "<<c[i]<<" 列上"<<endl<<endl;
}
total++;
return;
}
for(int i=1;i<=n;i++)
{
c[cur]=i;
int ok=1;
for(int j=1;j<cur;j++)
{
if(c[cur]==c[j]||cur-c[cur]==j-c[j]||cur+c[cur]==j+c[j])
{
ok=0;
break;
}
}
if(ok)
dfs(cur+1);
}
}
int main()
{
while(1)
{
cout<<"请输入皇后的个数: "<<endl;
cin>>n;
if(n<=0)
{
cout<<"输入不合法,程序退出!"<<endl;
break;
}
cc=1;
total=0;
dfs(1);
cout<<"总计有"<<total<<"个解"<<endl<<endl;
}
return 0;
}
运行截图:
相关文章推荐
- [数据结构] N皇后问题
- 【数据结构】算法6.16 N皇后问题
- 数据结构应用案例——栈结构用于8皇后问题的回溯求解
- python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
- 【数据结构】关于马踏棋盘(8皇后问题)
- C语言-数据结构-递归求解实例-8皇后问题
- 6-11-N皇后问题-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- [数据结构] N皇后问题
- [数据结构] N皇后问题
- 南邮数据结构、算法实践周提高题3(图的连通问题和二叉排序树)
- 数据结构-图的单源最短路径问题
- N皇后问题
- 剑指offer-面试题28_3 八皇后问题
- N-Queens II:只记录下结果即可的N皇后问题
- 回溯法解决n皇后问题
- 【POJ】1321-棋盘问题 n皇后、dfs
- 皇后问题解一
- HDU 2553 N皇后问题(详细题解)
- n皇后问题--c代码
- 数据结构 线性循环列表(约瑟夫问题)