2n皇后问题
来源:互联网 发布:电脑软件商店 编辑:程序博客网 时间:2024/05/03 23:00
//2n皇后问题:1、放黑皇后,同时判断一些位置本身是否可放// 2、放白皇后,同时判断一些位置本身是否可放,并要判断一些位置是否已经放了黑皇后#include <iostream>using namespace std;void search_1(int step);//放置黑皇后void search_2(int step);//放置白皇后const int maxn=100;int n,ans=0;int chess[maxn][maxn];//棋盘int vis[3][maxn];//黑皇后的标记int vis1[3][maxn];//白皇后的标记int main(){cin>>n;int i,j;for (i=0;i<n;i++)for (j=0;j<n;j++)cin>>chess[i][j];search_1(0);cout<<ans<<endl;return 0;}void search_1(int step)//(step,i){int i,j;if (step==n) search_2(0);//当黑皇后放完时,开始放白皇后else for (i=0;i<n;i++){if (chess[step][i])//先判断该位置能不能放棋if (!vis[0][i] && !vis[1][step+i] && !vis[2][step-i+n])//判断 列,主对角线,副对角线{vis[0][i]=vis[1][step+i]=vis[2][step-i+n]=1;chess[step][i]=0;//(step,i)放入皇后search_1(step+1);vis[0][i]=vis[1][step+i]=vis[2][step-i+n]=0;//递归完后要恢复chess[step][i]=1;//递归完后要恢复}}}void search_2(int step){int i,j;if (step==n) ans++;//白皇后都放完后,完成一种方法。else for (i=0;i<n;i++){if (chess[step][i])if (!vis1[0][i] && !vis1[1][step+i] && !vis1[2][step-i+n]){vis1[0][i]=vis1[1][step+i]=vis1[2][step-i+n]=1;chess[step][i]=0;//(step,i)放入皇后search_2(step+1);vis1[0][i]=vis1[1][step+i]=vis1[2][step-i+n]=0;chess[step][i]=1;}}}
0 0
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2N皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- Could not find any information for the class named ....
- Algrothm_Sort_Shell
- PHPStorm 10 配置PHPUnit
- 让build自动增长的脚本
- 在Spark(1.6.0)中处理hbase( 1.0.0)中的数据
- 2n皇后问题
- 好玩的Drone2Map
- 对<jsp:include>和<@ include>的区别和用法的简单理解
- iOS NSPredicate用法详解
- Linux网络I/O模型
- webservice(一) 发布简单的服务端
- 单例模式的8种写法
- BZOJ2718毕业旅行
- Tomcat配置虚拟主机的方法