主题:严蔚敏《数据结构(C语言版)》的算法6.16 P152
#include<stdio.h>
#define N 4
static int a[6]={10,10,10,10,10,10};
void Print(int a[])
{
for(int i=1; i<=4; i++)
{
for(int j=1; j<=4; j++)
{
if(j!=a[i])
printf("0");
else
printf("1");
}
printf("\n");
}
printf("\n");
}
bool Standard(int i)//把第i行和前i-1行进行合法性比较检查,j代表第j几列
{
int k=i-1;
int l=10;
for(;k>0;k--)
{
if(a[k]==a[i])
return false;
}
for(k=i-1;k>0; k--)
{
l=i-k;
if((a[k]+l)==a[i]||(a[k]-l)==a[i])
return false;
}
return true;
}
void Trial(int i,int n)
{
if(i>n)Print(a);
else
for(int j=1;j<=n; ++j)
{
a[i]=j;
if(Standard(i))Trial(i+1,n);
a[i]=10;
}
}
void main()
{
int i=1,n=4;
Trial(i,n);
}
#define N 4
static int a[6]={10,10,10,10,10,10};
void Print(int a[])
{
for(int i=1; i<=4; i++)
{
for(int j=1; j<=4; j++)
{
if(j!=a[i])
printf("0");
else
printf("1");
}
printf("\n");
}
printf("\n");
}
bool Standard(int i)//把第i行和前i-1行进行合法性比较检查,j代表第j几列
{
int k=i-1;
int l=10;
for(;k>0;k--)
{
if(a[k]==a[i])
return false;
}
for(k=i-1;k>0; k--)
{
l=i-k;
if((a[k]+l)==a[i]||(a[k]-l)==a[i])
return false;
}
return true;
}
void Trial(int i,int n)
{
if(i>n)Print(a);
else
for(int j=1;j<=n; ++j)
{
a[i]=j;
if(Standard(i))Trial(i+1,n);
a[i]=10;
}
}
void main()
{
int i=1,n=4;
Trial(i,n);
}