主题: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
上面有好多好东东!
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
上面有好多好东东!