n皇后
来源:互联网 发布:淘宝网广场舞高帮鞋 编辑:程序博客网 时间:2024/05/16 18:08
#include<iostream>
using namespace std;
bool vis[3][30];//记忆数组判断列,主对角线,副对角线是否被占
int ans=0,n;
void dfs(int cur)
{
if(cur==n+1)//如果当前行数超过8(表明八个皇后已经放好)则结果加一,返回继续递归
{
ans++;
return ;
}
//vis[0][i]判断列,vis[i][cur-i+8]判断主对角线,vis[2][cur+i]判断副对角线
for(int i=1;i<=n;i++)if(!vis[0][i]&&!vis[1][cur-i+n]&&!vis[2][cur+i])
{
vis[0][i]=vis[1][cur-i+n]=vis[2][cur+i]=true;
dfs(cur+1);//深度搜索
vis[0][i]=vis[1][cur-i+n]=vis[2][cur+i]=false;
}
}
int main()
{
n;
while(cin>>n,n)
{
dfs(1);//初始化cur为1,即从第一行开始
cout<<ans<<endl;
}
return 0;
}
using namespace std;
bool vis[3][30];//记忆数组判断列,主对角线,副对角线是否被占
int ans=0,n;
void dfs(int cur)
{
if(cur==n+1)//如果当前行数超过8(表明八个皇后已经放好)则结果加一,返回继续递归
{
ans++;
return ;
}
//vis[0][i]判断列,vis[i][cur-i+8]判断主对角线,vis[2][cur+i]判断副对角线
for(int i=1;i<=n;i++)if(!vis[0][i]&&!vis[1][cur-i+n]&&!vis[2][cur+i])
{
vis[0][i]=vis[1][cur-i+n]=vis[2][cur+i]=true;
dfs(cur+1);//深度搜索
vis[0][i]=vis[1][cur-i+n]=vis[2][cur+i]=false;
}
}
int main()
{
n;
while(cin>>n,n)
{
dfs(1);//初始化cur为1,即从第一行开始
cout<<ans<<endl;
}
return 0;
}
- n皇后
- N皇后
- N 皇后
- n皇后
- n皇后
- N皇后
- N皇后
- n皇后
- n 皇后
- N皇后
- N皇后
- N皇后
- N皇后
- n皇后
- N皇后
- N皇后
- N皇后
- N皇后
- Bug分析与单元测试 (2)
- 世界上有哪些优秀的grid组件??(征集ing...)
- android--service和broadcastReceiver基础
- flashdevelop工程调用android方法
- httplib2---python下的http请求终结者
- n皇后
- Java 反射机制
- CodeSmith Professional 5与VS2010有冲突
- Slide Show: 10 SQL Injection Tools For Database Pwnage
- android--context和intentFilter
- Java jdk7学习笔记:管理原始码与位码文档
- UIScrollView 原理(转载)
- EXT 做布局设置的一点经验
- java 中的剪切板