本文发表在 rolia.net 枫下论坛#include <conio.h>
#define MAXN 20
int n, m,good;
int col[MAXN+1],a[MAXN+1];
int b[2*MAXN+1],c[2*MAXN+1];
main()
{
int i,j;
int num=1;
char awn;
printf("Input n: "); /*输入皇后的个数,例如8*/
scanf("%d",&n);
for(j=0;j<=n;j++)
a[j]=1;
for(j=0;j<=2*n;j++)
b[j]=c[j]=1;
m=1;
col[1]=1;
good=1;
col[0]=1;
do{
if(good)
if(m==n)
{
printf("NO. %d method.\n",num); /*输出第 num种排列方法*/
printf(" ");
for(i=1;i<=n;i++)
printf("%4d",i);
printf("\n");
for(i=1;i<=n;i++)
{ printf("%d",i);
for(j=1;j<=n;j++)
{if(j==col[i])
{
printf(" Q"); /*Q的位置为皇后的位置*/
}
else printf(" *");
}
printf("\n");
}
awn=getch();
if(awn=='Q'¦¦awn=='q')
exit();
else
num++;
while(col[m]==n)
{
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
else{
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=0;
col[++m]=1;
}
else{
while(col[m]==n)
{
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
good=a[col[m]]&&b[m+col[m]]&&c[n+m-col[m]];
}
while(m!=0);
}更多精彩文章及讨论,请光临枫下论坛 rolia.net
#define MAXN 20
int n, m,good;
int col[MAXN+1],a[MAXN+1];
int b[2*MAXN+1],c[2*MAXN+1];
main()
{
int i,j;
int num=1;
char awn;
printf("Input n: "); /*输入皇后的个数,例如8*/
scanf("%d",&n);
for(j=0;j<=n;j++)
a[j]=1;
for(j=0;j<=2*n;j++)
b[j]=c[j]=1;
m=1;
col[1]=1;
good=1;
col[0]=1;
do{
if(good)
if(m==n)
{
printf("NO. %d method.\n",num); /*输出第 num种排列方法*/
printf(" ");
for(i=1;i<=n;i++)
printf("%4d",i);
printf("\n");
for(i=1;i<=n;i++)
{ printf("%d",i);
for(j=1;j<=n;j++)
{if(j==col[i])
{
printf(" Q"); /*Q的位置为皇后的位置*/
}
else printf(" *");
}
printf("\n");
}
awn=getch();
if(awn=='Q'¦¦awn=='q')
exit();
else
num++;
while(col[m]==n)
{
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
else{
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=0;
col[++m]=1;
}
else{
while(col[m]==n)
{
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
good=a[col[m]]&&b[m+col[m]]&&c[n+m-col[m]];
}
while(m!=0);
}更多精彩文章及讨论,请光临枫下论坛 rolia.net