一头雾水。。。求助~~~

来源:百度知道 编辑:UC知道 时间:2024/06/06 04:34:31
在编一个八皇后问题的c++程序,写出来了,但是老是弄不到正确答案,还请高手赐教,看看到底哪里错了
#include <iostream>
using namespace std;

int a[8],b[15],c[15];
int s[8];//记录第i列放置皇后的行数
void f(int i,int j)//i是列,j是行,放置皇后的位置
{
bool p=false;// 判断是否能放上皇后
if((a[j]==0) && (b[i+j]==0) && (c[i-j+7]==0) && j<8)
{

a[j]=1;
b[i+j]=1;
c[i-j+7]=1;//放上皇后
p=true;
s[i]=j;
if(i+1<7)
{f(i+1,0);}//如果能放上,再放下一列的
}
if(p==false && j+1<8)//如果j行放不下,就放j+1行,当然得保证j+i行还在棋盘上
{f(i,j+1);}
if(p==false && j+1==8)//如果j行放不下,而且又是最后一行,则应退到前一列重新放皇后
{
f(i-1,s[i-1]+1);//从前一列的刚才放置皇后的位置向下寻找放置的位置
a[s[j-1]]=0;
b[i-1+s[i-1]]=0;
c[i-1-s[i-1]+7]=0;//把前一列上的皇后拿掉

}
}
int main()
{
f(0,0);
for(int i=0;i<8;i++)
{
cout<<"("<<i+1<<","<<s[i]+1<<")";
}
return 0;
}

#include <malloc.h>
#include <stdio.h>
main()
{
queens(8);
getch();
}
int place(int k,int *x)
{
int i;
for(i=1;i<k;i++)
{
if(x[i-1]==x[k-1]||x[i-1]-x[k-1]==i-k||x[i-1]-x[k-1]==k-i)
{
return -1;
}
}
return 1;
}
int queens(int n)
{
int *x,i,k,cs;
x=malloc(n+n);
cs=0;
x[0]=0;
k=1;while(k>0)
{
do
{
x[k-1]=x[k-1]+1;
}while(x[k-1]<=n&&place(k,x)<0);
if(x[k-1]<=n)
{
if(k==n)
{
cs++;
printf("\ns.%3d:",cs);
for(i=0;i<n;i++)
{
printf("%2d",x[i]);
}
}
else
{
k=k+1;
x[k-1]=0;
}
}
else
{