首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > [数据结构]八皇后问题求解(递归与非递归形式)
【标  题】:[数据结构]八皇后问题求解(递归与非递归形式)
【关键字】:
【来  源】:http://blog.csdn.net/chantor/archive/2007/04/11/1560191.aspx

[数据结构]八皇后问题求解(递归与非递归形式)

 #include <iostream.h>
#include <stdlib.h>
#define True 1
#define False 0
using namespace std;
int nQueen(int*a,int k,int n)
{
int i,j,conflict;
if(k>=n) return True;
for(i=0;i<n;i++)
{
conflict=False;
for(j=0;j<k;j++)
{
if(i==a[j]||(k-j)==(i-a[j])||(k-j)==(a[j]-1))
conflict=True;
}
if(conflict==False)
{
a[k]=i;
if(nQueen(a,k+1,n)==True)
return True;
}
}
return False;
}
void PrintSolution(int*a,int n)
{
int i,j;
char c=2;
char q=5;
cout<<"将Queen放入下列位置:"<<endl;
for(i=0;i<n;i++)
{
cout<<"\t行"<<i+1<<"列"<<a[i]+1<<": \t\t ";
for(j=0;j<a[i];j++)
cout<<c;
cout<<"Q";
for(j=a[i]+1;j<n;j++)
cout<<c;
cout<<endl;
}
}
int main()
{
int n,*a;
cout<<"请输入n已确定问题的大小:"<<endl;
cin>>n;
if(n>0)
{
a=new int[n];
}
else
{
cout<<"Error!Ivailed Input!"<<endl;
system("pause");
return False;
}
if(nQueen(a,0,n)==True)
{
PrintSolution(a,n);
}
else
cout<<"该问题无解!"<<endl;
delete(a);
system("pause");
return 0;
}
非递归函数:
int nQueen(int *a,int n)
{
int top,i,j,conflict;
if(n<=0) return False;
top=-1;
i=0;
do{
conflict=False;
for(j=0;j<top+1;j++)
if(i==a[j]||(top+1-j)==(i-a[j])||(top+1-j)==(a[j]-1))
conflict=True;
if(conflict==False)
{
a[++top]=i;
if(top==n-1) return True;
i=0;
}
else
{
while(i==n-1&&top>=0)
i=a[top--];
i++;
}
}while(i<n);
return False;
}
C++中的mutable:【上一篇】
C++主题——static类成员:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 动态增减表格行列
  • Ubuntu 6.10准时发布
  • AuthorwareXtras的分类和使用技巧(三)
  • .NET 点滴
  • 为什么执行JAVA程序时,会出现Exception in thread"main" java.lan
  • [原创]MASM32新手指南
  • Adodb.Command 平时很少注意到的一个参数
  • 累个半死写个ROS教程~~
  • “在线访客”的制作方法
  • 关于System.Math.Round()的用法
  • 【相关评论】
    发表人: Post @ 2008-11-1 22:13:22
    邮件:
    youwenti !
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.