N(8)皇后问题
来源:互联网 发布:网络端口号 编辑:程序博客网 时间:2024/06/04 07:03
N(8)皇后问题
刚刚练下手,试了一下穷举法,据说还有回溯法,以后再尝试。先写我的穷举法解法
1.穷举法
/*N皇后问题 算法:穷举+N进制模拟*/#include<stdio.h>const maxn =1000; int a[maxn]; //a[]:储存棋子位置,int n,t[maxn],x1[2*maxn],x2[2*maxn]; //分别用来 判断是否列重合,'\' 和'/'两种斜是否重合;void clear(){ //将判断用的数组清零for(int i=0;i<=2*n;i++) t[i]=0;for( i=0;i<=n*2;i++)x1[i]=0;for( i=0;i<=n*2;i++)x2[i]=0;} int check(){//判断是否符合规则。for(int i=1;i<=n;i++){t[a[i]]++;if(t[a[i]]>=2){clear();return 1;}}for(i=1;i<=n;i++){x1[a[i]+n-i]++; //如此之斜‘/';x2[i+a[i]-1]++; //正斜 ‘\’;}for(i=0;i<2*n-1;i++) if(x1[i]>=2||x2[i]>=2) { clear(); return 1; } return 0;}int main(){int z=1;scanf("%d",&n);int i=0;for(int j=1;j<=n;j++) //此处模拟N进制,把皇后的位置以数字的形式保存。a[j]=j-1;while(a[0]!=1){ //穷举法a[n]+=1;for(i=n;i>0;i--)if(a[i]>=n)a[i]-=n,a[i-1]+=1; if(check())continue;for(i=1;i<=n;i++){for(j=0;j<a[i];j++)printf("0");printf("1");for(j=a[i]+1;j<n;j++)printf("0");printf("\n");}printf("--------------%d-------\n",z++);}return 0;}
阅读全文
0 0
- N(8)皇后问题
- 8皇后问题和N皇后问题
- N*N皇后问题
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 回溯法解决2n皇后(8皇后)问题
- 2017.11.8 LeetCode N皇后问题
- N皇后问题
- n皇后问题
- N皇后问题
- N 皇后问题
- N皇后问题
- N皇后问题算法
- N 皇后问题
- N皇后问题
- N皇后问题
- n皇后问题
- N皇后问题
- 简化Presenter,Nucleus组件
- hexo 学习链接
- Android Studio导入项目非常慢的解决办法
- 对象池
- 自然语言处理(一)
- N(8)皇后问题
- [已解决]软件测试:Jmeter运行错误
- 闲说HeartBeat心跳包和TCP协议的KeepAlive机制
- Arduino小车PID调速前期准备——码盘测速精度的提高
- Vue折腾记
- Flask+SQLAlchemy入门使用
- 关于Android 出现65536,导致项目无法正常编译问题的解决
- hdu2067(卡特兰数)
- java 8个基本类型的初始化默认值