首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言最笨的八皇后有关问题,哪错了

2013-09-07 
C语言最笨的八皇后问题,哪错了?输入为先输入一个n,然后再输入n个数,分别为第几个解。输入数据 第1行是测试

C语言最笨的八皇后问题,哪错了?
输入为先输入一个n,然后再输入n个数,分别为第几个解。

输入数据 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)
输出数据 输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。
输入示例 2 1 92 
输出示例 15863724  84136275

我的代码如下:


#include <stdio.h>
int yige(int a[8])           //用于判断该数列是不是解
{
    int i,j;
    for(j=0;j<8;j++)
        for(i=0;i<8;i++)
            if(a[j] == a[i] || abs(j-i) == abs(a[j]-a[i])) return 0;
    return 1;
}
void jisuan(int b[92][8])  //计算出所有解
{
    int i,j,k,g;
    int flag;
    int a[8]={0};
    int count[8]={0};
    int test;
  
    for(count[0]=0;count[0]<8;count[0]++)              /*对数列做排列组合,把所有情况列举出来,                    
                                                         在判断是不是解,即从00000000-77777777都
                                                         算一遍*/
    {
        for(count[1]=0;count[1]<8;count[1]++)
        {
            for(count[2]=0;count[2]<8;count[2]++)
            {
                for(count[3]=0;count[3]<8;count[3]++)
                {
                    for(count[4]=0;count[4]<8;count[4]++)
                    {


                        for(count[5]=0;count[5]<8;count[5]++)
                        {
                            for(count[6]=0;count[6]<8;count[6]++)
                            {
                                for(count[7]=0;count[7]<8;count[7]++)
                                {
                                    for(j=0;j<8;j++)
                                    {
                                        a[j]=count[j];
                                    }
                                     flag=yige(a);
                                     if(flag)
                                     {
                                         for(i=0;i<8;i++)


                                         {
                                              b[g][i]=a[i];
                                         }
                                     g++;
                                     }
                                     test++;
                                }
                        }
                    }
                }
            }
        }
    }
}
    printf("%d",test);
}
int main()
{
    int i,j;
    int n;
    int a[8]={0};
    int b[92][8]={0};
    jisuan(b);
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n;i++)
    {
        for(j=0;j<8;j++)
            printf("%d",b[a[i]][j]);
        printf("\n");


    }
    return 0;
}


最后输出的全是00000000,而且test也不是8^8。。
我知道可以用回溯或者递归,但我这样做应该是最笨的方法但也应该对啊。
[解决办法]
果然够笨啊!
[解决办法]
我擦,这个用了多少层循环啊?
估计你老师看了你的代码会哭笑不得的!

[解决办法]
晕,我看都看晕了。

热点排行