n皇后问题
来源:互联网 发布:日语汉字注音软件 编辑:程序博客网 时间:2024/06/15 03:54
n皇后
在nXn格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?
次数
#include<stdio.h>#include<math.h>int n,ans=0;int f[1000];int check(int x,int y){//判断是否矛盾int i,j;for(i=1;i<x;i++){if(f[i]==y || abs(x-i)==abs(y-f[i])){return 0;}}return 1;}int dfs(int i){//搜索,判断是否可以到第n行,回 溯法 int j;if(i==n+1){ans++;return 0;}for(j=1;j<=n;j++){if(check(i,j)==1){f[i]=j;dfs(i+1);}}}int main(){int i,j;scanf("%d",&n);dfs(1); printf("%d",ans);}输出棋盘
#include<stdio.h>#include<math.h>int n,ans=0;int f[1000];int check(int x,int y){//判断是否矛盾 int i,j;for(i=1;i<x;i++){if(f[i]==y || abs(x-i)==abs(y-f[i])){return 0;}}return 1;}void out(){//输出方案 printf("case %d\n",ans);int i,j;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(f[i]==j) printf("%d ",1);else printf("%d ",0);}printf("\n");}}int dfs(int i){int j;if(i==n+1){ans++;out();return 0;}for(j=1;j<=n;j++){if(check(i,j)==1){f[i]=j;dfs(i+1);//继续搜,判断是否可以到第n行 }}}int main(){int i,j;scanf("%d",&n);dfs(1); printf("%d",ans);}
阅读全文
0 0
- N*N皇后问题
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- N皇后问题
- n皇后问题
- N皇后问题
- N 皇后问题
- N皇后问题
- N皇后问题算法
- N 皇后问题
- N皇后问题
- N皇后问题
- n皇后问题
- N皇后问题
- N皇后问题优化
- N皇后问题
- n皇后问题
- N皇后问题
- Java IO相关知识
- SpringBoot添加freemarker模板引擎
- 文本操作类SpannableString的使用
- 喵星球上的点名
- SQLite学习手册(锁和并发控制)
- n皇后问题
- springmvc映射的牛头不对马嘴的原因
- Mac系统安装Lua
- 000032:将两个数相加的结果输出
- 两个有序链表序列的合并 PAT
- Xcode下载低版本iOS系统模拟器进行调试
- 恶补系列之操作系统——内核态与用户态
- c语言数据类型及printf
- 图邻接表数组存储