n Queens Problem(回溯法)
来源:互联网 发布:阿里云服务器ftp登陆 编辑:程序博客网 时间:2024/05/21 09:56
#include <stdio.h>int count=0; /*记录四皇后问题解的个数*/int isCorrect(int i,int j,int (*Q)[4]){ int s,t; for(s=i,t=0;t<4;t++) if(Q[s][t]==1 && t!=j)return 0; /*判断行*/ for(t=j,s=0;s<4;s++) if(Q[s][t]==1 && s!=i)return 0; /*判断列*/ for(s=i-1,t=j-1;s>=0&&t>=0;s--,t--) if(Q[s][t] == 1)return 0; /*判断左上方*/ for(s=i+1,t=j+1;s<4&&t<4;s++,t++) if(Q[s][t] == 1) return 0; /*判断右下方*/ for(s=i-1,t=j+1;s>=0&&t<4;s--,t++) if(Q[s][t] == 1) return 0; /*判断右上方*/ for(s=i+1,t=j-1;s<4&&t>=0;s++,t--) if(Q[s][t] == 1) return 0; /*判断左下方*/ return 1; /*否则返回1*/}void Queen(int j,int (*Q)[4]){ int i , k; if(j==4) { /*得到了一个解*/ for(i=0;i<4;i++) { for(k=0;k<4;k++) printf("%d ",Q[i][k]); printf("\n"); } printf("\n"); count++; return; } for(i=0;i<4;i++) { if(isCorrect(i,j,Q)) /*如果Q[i][j]可以放置皇后*/ { Q[i][j] = 1; /*放置皇后*/ Queen(j+1,Q) ; /*深度优先搜索解空间树*/ Q[i][j] = 0; } }}int main(){ int Q[4][4]; int i,j; for( i=0;i<4;i++) for( j=0;j<4;j++) Q[i][j] = 0; /*初始化数组Q*/ Queen(0,Q); /*执行四皇后求解*/ printf("The number of the answers of FOUR_QUEEN are %d",count); return 0;}
/*皇后问题求解*/#include<stdio.h>#define n 8int m=0,a[n+1]; /*存放第i个皇后放置的行号*/int ok(int i,int j) /*检查(i,j)上能否放棋子*/{ int j1,i1,ok1; j1=j; i1=i; ok1=1; /*检查第i行上能否放棋子*/ while((j1>1)&&ok1) { j1--; ok1=a[j1]!=i; } j1=j; i1=i; /*检查对角线上能否放棋子*/ while((j1>1)&&(i1>1)&&ok1) { j1--; i1--; ok1=a[j1]!=i1; } j1=j; i1=i; /*检查另一对角线上能否放棋子*/ while((j1>1)&&(i1<n)&&ok1) { j1--; i1++; ok1=a[j1]!=i1; } return ok1;}void queen(int j) /*从第j列开始逐个试探*/{ int i; if (j>n) { m++; { printf("m=%d ",m); for (i=1;i<=n;i++) printf(" %d",a[i]); printf("\n"); } } else for( i=1;i<=n;i++) if(ok(i,j)) /*检查(i,j)上能否放棋子*/ { a[j]=i; /*在(i,j)上放一个棋子*/ queen(j+1) ; }}int main(){ printf("\n************\n"); queen(1);}
- n Queens Problem(回溯法)
- LeetCode OJ - N-Queens 回溯法
- 【Leetcode】51. N-Queens(回溯)
- leetcode---N-Queens---回溯
- N-Queens(递归回溯+迭代回溯)
- 【LeetCode】N-Queens II N皇后问题 回溯法
- N-Queens N皇后放置问题 回溯法
- [数据结构]N-Queens Problem(recursion)
- N-Queens Problem
- LeetCode 51. N-Queens 回溯
- N-Queens And N-Queens II [LeetCode] + Generate Parentheses[LeetCode] + 回溯法
- 回溯法——八皇后问题 n-queens
- N-Queens C++递归回溯实现
- N-Queens II 回溯法求八皇后
- 52. N-Queens II 回溯算法浅谈
- 51. N-Queens 回溯算法浅谈
- leetcode 51 N-Queens 回溯 万能结构
- zoj 2778 - Triangular N-Queens Problem
- myeclipse优化
- Fibonacci sequence of k order
- IOS越狱开发之短信--发送内容修改
- sqlite关于日期的处理
- Wireshark抓包工具使用教程以及常用抓包规则
- n Queens Problem(回溯法)
- 欧拉函数打表(备忘)
- C#多线程环境下调用 HttpWebRequest 并发连接限制
- Weblogic 脚本工具 导航和编辑 MBean
- vs2010 C++ 静态编译(解决:程序在别人的机子运行不了,缺少mfc100.dll, xxx100d.dll等的解决方法)
- Ubuntu 中软件的安装、卸载以及查看的方法
- 回忆《秦颂》,一半
- 指针的指针
- 电子工程师如何经营人脉_FPGA_8_24