读书人

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

发布时间: 2013-09-07 14:12:44 作者: rapoo

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。。
我知道可以用回溯或者递归,但我这样做应该是最笨的方法但也应该对啊。
[解决办法]
果然够笨啊!
[解决办法]
我擦,这个用了多少层循环啊?
估计你老师看了你的代码会哭笑不得的!

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

读书人网 >C语言

热点推荐