n皇后问题【非递归回溯】
来源:互联网 发布:淘宝刷单一天能赚多少 编辑:程序博客网 时间:2024/05/01 05:35
/*非递归回溯算法解决n皇后问题*/
#include<stdio.h>
#include <math.h>
int a[20];//最多可以解决20皇后问题
int check(int n)
{
int i,flag;
flag = 1;
for (i=1;i<n;i++)
{
if (abs(a[i]-a[n])==abs(i-n) || a[i]==a[n])
{
flag=0;
break;
}
}
return flag;
}
void output(int k)
{
int i;
for (i=1;i<=k;i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
void Queens(int n)
{
int k;
k=1;
a[k]=0;
while (k>0)
{
a[k]++;//①新的皇后位置置1、②回溯之后查找下一个位置
while (a[k]<=n && check(k)==0)//为第k个皇后找一个合适的位置
{
a[k]++;
}
if (a[k]<=n)//第k个皇后的位置是否越界
{
if (k==n)//如果k=n,说明已经找到一组合适的解,输出。
{
output(k);
}
else//如果k=n,则继续寻找下一个皇后的位置
{
k++;
a[k]=0;//新的皇后位置置0
}
}
else//如果第k个皇后的位置越界,说明没有合适的位置,回溯。
{
k--;
}
}
}
void main()
{
int n;
printf("输入皇后个数:");
scanf("%d",&n);
Queens(n);
}
- n皇后问题【非递归回溯】
- N皇后问题的非递归回溯和递归回溯
- 非递归回溯算法求解n-皇后问题
- 用栈+回溯+非递归解决N皇后问题
- 非递归求解N皇后问题(回溯法)
- n皇后问题--递归回溯
- N皇后问题递归回溯
- 八皇后问题 回溯 非递归 java
- N皇后问题的递归回溯实现
- N皇后问题(回溯递归)
- N皇后问题 --递归及回溯解决方案
- 回溯法解决N皇后问题——递归与非递归求解
- HDU 2553 N皇后问题 (回溯法 递归·非递归)
- 八皇后问题(回溯+递归)/(回溯+非递归)
- 回溯 八皇后问题(递归和非递归)
- 八皇后问题(递归、非递归——回溯)
- 非递归求N皇后问题
- N皇后问题的非递归算法
- centos6.2下的codeblocks配置opengl环境
- java socket通信时,中文字符乱码的一个解决方法
- 修改oracle密码
- 金蝶BOS元模型分析
- 程序员不得不珍藏的那些励志片段
- n皇后问题【非递归回溯】
- 恢复扩容U盘实际容量 检查正版U盘 U盘量产工具 U盘修复工具使用方法
- GDB调试精粹及使用实例
- Java多线程:类Executors主要的工厂方法
- centos6.2安装中文输入法
- Java设计模式之单例模式
- n皇后问题【递归】
- tomcat组成及工作原理
- 对Spring的理解