版权声明:如果不小心侵权了请及时说 会改的。祝大家看的开心同时也可以学到一点点东西 https://blog.csdn.net/zuoside__lord/article/details/81395429
#include<stdio.h>
static int queen[4][4]={0};
int main()
{
print();
trial(0,4);
}
void trial(int i,int n)
{
int j;
if(i>n-1)
{
print();
}
else for(j=0;j<n;j++)
{
queen[i][j]=1;
if(judege(i,j))
{
trial(i+1,n);
}
else
{
queen[i][j]=0;
}
}
}
void print()
{
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",queen[i][j]);
}
printf("\n");
}
printf("-----------------------\n");
}
int judege(int a,int b)
{
// print();
//printf("a=%d b=%d (a,b)=%d\n",a,b,queen[a][b]);
int x,y,flag;
for(x=0;x<4;x++)
{
if(queen[a][x]==queen[a][b])
{
if(x!=b)
{
//printf("横相等x:%d y:%d\n",a,x);
return 0;
}
}
}
for(x=0;x<4;x++)
{
if(queen[x][b]==queen[a][b]&&(x!=a))
{
// printf("纵相等x:%d y:%d\n",a,b);
return 0;
}
}
if(a==b)
{
// printf("对角线相等x:%d y:%d\n",a,b);
return 0;
}
if(a+b==3)
{
// printf("对角线相等x:%d y:%d\n",a,b);
return 0;
}
return 1;
}
//这是有BUG的,only one answer,but there four answer,,,,,,just record,回溯并没有回去,,,,,,,
下面就是right:
#include<stdio.h>
static int queen[4][4]={0};
int main()
{
print();
trial(0,4);
}
void trial(int i,int n)
{
int j;
if(i>n-1)
{
print();
}
else for(j=0;j<n;j++)
{
if(judege(i,j))
{
queen[i][j]=1;
trial(i+1,n);
queen[i][j]=0;
}
}
}
void print()
{
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",queen[i][j]);
}
printf("\n");
}
printf("-----------------------\n");
}
int judege(int a,int b)
{
int x,y,flag;
for(x=0;x<4;x++)
{
if(queen[a][x]==1)
{
if(x!=b)
{
return 0;
}
}
}
for(x=0;x<4;x++)
{
if(queen[x][b]==1&&(x!=a))
{
return 0;
}
}
if(a==b)
{
return 0;
}
if(a+b==3)
{
return 0;
}
return 1;
}