回 帖 发 新 帖 刷新版面

主题:8皇后问题的答案

#include<math.h>
main ()
{int a[9],i,j,t=0;

for(a[1]=1;a[1]<9;a[1]++)
for(a[2]=1;a[2]<9;a[2]++)
for(a[3]=1;a[3]<9;a[3]++)
for(a[4]=1;a[4]<9;a[4]++)
for(a[5]=1;a[5]<9;a[5]++)
for(a[6]=1;a[6]<9;a[6]++)
for(a[7]=1;a[7]<9;a[7]++)
for(a[8]=1;a[8]<9;a[8]++)
{for(i=1;i<9;i++)
{    for(j=i-1;j>0;j--)
        {if(a[i]==a[j]||fabs(a[i]-a[j])==fabs(i-j))goto point;}
        if(i==8)
            {for(i=1;i<9;i++)
            printf("(%d,%d)",i,a[i]);t++;
            } }point:;}  printf("     %d",t);
}


此方法确实效率不高,我又编了一个:

#include <stdio.h>
#include <math.h>
void work(int a[8][8],int row);

int b[8]={0};
int count=1;
main()
{
    int a[8][8]={0};    
work(a,0);

}

void work(int a[8][8],int row)
{
int i,j;
if(row==8)
{
printf("\n\n-----%d answer------\n",count++);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
    printf("%d ",a[i][j]);
printf("\n");

}
getchar();
return;
}
for(i=0;i<8;i++)
{
    for(j=0;j<row;j++)
        if(i==b[j]||fabs(i-b[j])==fabs(row-j))
            break;
if(j==row)
{
a[row][i]=1;
b[row]=i;
work(a,row+1);
a[row][i]=0;
b[row]=0;
}

}
}
欢迎大家访问:http://mail.ustc.edu.cn/~fygood
上面有好多好东东!

    

回复列表 (共9个回复)

沙发

goto...

板凳

必须用goto吗?

3 楼

如果不用,可加一个参数。开始时为0,满足条件后为1。

4 楼

以后写程序加一点注释,OK?

5 楼

同意楼上的说法。

6 楼

不错,真的很不错,太简单了。我们明天上机正好一用。

7 楼

for(a[1]=1;a[1]<9;a[1]++)
8 的9次方,你可真够恨啊,时间复杂度不会太大 吗?

8 楼

拜托,学学数据结构好不好,写着东西有什么用,我要说100皇后,你机子要运行还不得崩溃,时间开销太大了0

9 楼

#include "iostream.h"

int col[8]={0};//皇后列
int positive[15]={0};//正斜
int negtive[15]={0};//反斜
int temp[8]={0};//i行的皇后位置
void Queen8(int i)//i为行号
{
    for(int j=0;j<8;j++)
    {
        if(col[j]==0&&positive[7+i-j]==0&&negtive[i+j]==0)
        {
            col[j]=1;
            positive[7+i-j]=1;
            negtive[i+j]=1;
            temp[i]=j;//j col
           
            if(i==7)
            {
                for(int k=0;k<8;k++)cout<<temp[k]<<' ';
                cout<<endl;
            }
            else
                Queen8(i+1);

            col[j]=0;
            positive[7+i-j]=0;
            negtive[i+j]=0;
            temp[i]=0;

        }
    }
}




main()
{
    Queen8(0);
    return 1;
}
考验一下老兄,这段代码怎么样?算法我觉得很好,而且易于理解,与各楼共切磋!在vc6下通过。

我来回复

您尚未登录,请登录后再回复。点此登录或注册