求解n皇后问题
来源:互联网 发布:godaddy专享域名转入 编辑:程序博客网 时间:2024/05/18 00:47
/*n皇后问题:在n*n方格棋盘上放置n个皇后,要求每个皇后不同行,不同列,不同左右对角线*/
/*exp6-2.cpp*/
#include<stdio.h>
#include<stdlib.h>
const int N=20;/*最多皇后个数*/
int q[N];/*存放各皇后所在的行号*/
int count=0;/*存放解个数*/
void print(int n)/*输出一个解*/
{
count++;
int i;
printf("第%d个解:",count);
for(i=1;i<=n;i++)
printf("\t%d",q[i]);
printf("\n");
}
int find(int i,int k)/*测试第k列的i行上能否摆放皇后*/
{
int j;
j=1;
while(j<k)/*j=1~k-1是已放置了皇后的列*/
{
if((q[j]==i)||(abs(q[j]-i)==abs(j-k)))/*第j列皇后是否在i行或(q[j],j]与(i,k)是否同对角线*/
return 0;
j++;
}
return 1;
}
void place(int k,int n)/*第k个皇后放到第k列上*/
{
if(k>n)
print(n);/*所有皇后放置结束*/
else
for(int i=1;i<=n;i++)/*在第k列上穷举第一个位置*/
if(find(i,k))
{
q[k]=i;
place(k+1,n);
}
}
void main()
{
int n;
printf("皇后问题(n<20),n=");
scanf("%d",&n);
if(n>20)
printf("n值太大,不能求解\n");
else
{
printf("%d皇后问题求解如下如下如下:\n",n);
place(1,n);
printf("\n");
}
}
/*exp6-2.cpp*/
#include<stdio.h>
#include<stdlib.h>
const int N=20;/*最多皇后个数*/
int q[N];/*存放各皇后所在的行号*/
int count=0;/*存放解个数*/
void print(int n)/*输出一个解*/
{
count++;
int i;
printf("第%d个解:",count);
for(i=1;i<=n;i++)
printf("\t%d",q[i]);
printf("\n");
}
int find(int i,int k)/*测试第k列的i行上能否摆放皇后*/
{
int j;
j=1;
while(j<k)/*j=1~k-1是已放置了皇后的列*/
{
if((q[j]==i)||(abs(q[j]-i)==abs(j-k)))/*第j列皇后是否在i行或(q[j],j]与(i,k)是否同对角线*/
return 0;
j++;
}
return 1;
}
void place(int k,int n)/*第k个皇后放到第k列上*/
{
if(k>n)
print(n);/*所有皇后放置结束*/
else
for(int i=1;i<=n;i++)/*在第k列上穷举第一个位置*/
if(find(i,k))
{
q[k]=i;
place(k+1,n);
}
}
void main()
{
int n;
printf("皇后问题(n<20),n=");
scanf("%d",&n);
if(n>20)
printf("n值太大,不能求解\n");
else
{
printf("%d皇后问题求解如下如下如下:\n",n);
place(1,n);
printf("\n");
}
}
- 求解n皇后问题
- 求解N皇后问题
- n皇后问题求解
- N皇后问题求解算法
- n皇后问题求解 java
- 八皇后、N皇后问题的求解。
- 使用C#求解N皇后问题。
- C语言编程 N皇后问题求解
- 递归求解N皇后问题(c语言)
- N皇后问题的求解(C++代码)
- 回溯法求解n皇后问题
- QS2算法求解N-皇后问题
- N皇后问题回溯法求解
- n皇后问题-位运算求解
- 递归与迭代法求解N皇后问题
- 回溯法求解n皇后问题
- 回溯法求解N皇后问题。
- N皇后问题利用回溯法求解
- Eclipse运行java的完整命令行
- C++ specialization.txt
- Latex小知识点
- VS2012代码补全时左侧图标的含义
- unload_rpt_table.sh
- 求解n皇后问题
- 注解方式配置junit
- inner join on, left join on, right join on详细使用方法
- 如何在Windows NT上手动卸载Sybase Server及恢复master设备
- ubuntu12.04+nginx+uWsgi+django
- Java虚拟机内存管理
- Oracle数据库中的锁机制研究
- xcode
- ORA-00600 internal error code,arguments: 问题