上海生产许可证查询:万分着急!改程序!

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 04:38:45
数据结构课程实习:
关于八皇后问题,用C++写,用递归算法!
请高人帮忙!着急^^^^^^
稍微简单一点为好,但是程序别太短!
等待中^^^^^^

楼上写的太长了吧。。。

自己写的N皇后递归版:
#include<stdio.h>
int q[20];
int count=0;
void print(int n)
{int i;
count++;
for(i=1;i<=n;i++)
{printf("(%d,%d)",i,q[i]);
}
printf("\n");
}
int Place(int i,int k)
{int j;
j=1;
while(j<k)
{if((q[j]==i) || abs(q[j]-i)==abs(j-k)) return 0;
j++;
}
return 1;
}
void Queens(int k,int n)
{int i;
if(k>n)
print(n);
else
{for(i=1;i<=n;i++)
if(Place(i,k)==1)
{q[k]=i;
Queens(k+1,n);
}
}
}
int main()
{int n;
scanf("%d",&n);
Queens(1,n);
getch();
return 0;
}

#include<iostream.h>
#include <stdlib.h>

bool choise(int,int,int,int,int,int,int,int);
void print();
bool s[8][8];
void restart();
int as[8];
int choiseagain(bool);

void main()
{

restart();print();
int number=0;
for (as[0]=0;as[0]<8;as[0]++)
for (as[1]=0;as[1]<8;as[1]++)
for (as[2]=0;as[2]<8;as[2]++)
for (as[3]=0;as[3]<8;as[3]++)
for (as[4]=0;as[4]<8;as[4]++)
for (as[5]=0;as[5]<8;as[5]++)
for (as[6]=0;as[6]<8;as[6]++)
for (as[7]=0;as[7]<8;as[7]++)
{
for (int i=0;i<8;i++)
for (int j=0;j<8;j++)
if ((as[i]==as[j]) && i!=j)
goto re;
restart();
if (choise(as[0],as[1],as[2],as[3],as[4],as[5],as[6],as[7]))
{
number++;
cout<<endl;
system("PAUSE");
print();
}
re: ;
}
cout<<"有 "<<number<<" 解\n";
cout<<endl;
system("PAUSE");}

bool choise(int a,int b,int c,int d,int e,int f,int g,int h)
{
int cr[8];
cr[0]=a;
cr[1]=b;
cr[2]=c;
cr[3]=d;
cr[4]=e;
cr[5]=f;
cr[6]=g;
cr[7]=h;

for (int i=0;i<8;i++)
s[i][cr[i]]=true;
for (i=0;i<8;i++)
{
int kkk=0;

for(int j=0;j<=7-i;j++)
kkk+=choiseagain(s[i+j][j]);
if (kkk>1) return false;
kkk=0;

for(j=0;j<=7-i;j++)
kkk+=choiseagain(s[j][i+j]);
if (kkk>1) return false;
kkk=0;

for(j=0;j<=7-i;j++)
kkk+=choiseagain(s[7-i-j][j]);
if (kkk>1) return false;
kkk=0;

for(j=0;j<=7-i;j++)
kkk+=choiseagain(s[7-j][i+j]);
if (kkk>1) return false;

}
return true;
}

void restart()
{
for (int i=0 ; i<8; i++)
for (int j=0 ; j<8; j++)
s[i][j]=false;
}
void print()
{
for (int i=0 ; i<8; i++)
{
for (int j=0 ; j<8; j++)
cout<<s[i][j]<<" ";

cout<<"\n";
}
cout<<"\n\n";
}

int choiseagain(bool tf)
{
if (tf==true) return 1;
else return 0;
}

,,

上午改的两个程序!看看是不是你要的
http://zhidao.baidu.com/question/8965886.html
http://zhidao.baidu.com/question/8964951.html