// “ ”
// “ ”
/*
:
:2001 10 9 (17:35:38-18:00:00)
: “ ”
:2001 10 9 (14:00:00-15:00:00)
: “ ”
===================================================
:
n*n n “ ”,
.( , 、
4 , , 、
< >)
:
:
{
n;
m=0; //
notcatch=1; //
do
{
if(notcatch)
{
if(m==n)
{
;
( );
}
else
; //
}
else
( ); //
notcatch =
}while(m!=0)
}
*/
#include "stdlib.h"
#define MAXN 100
//
int m,n,NotCatch;
int ColFlag[MAXN+1]; /* i ColFlag[i] ,(1: ;0: )*/
int RowFlag[MAXN+1]; /*RowFlag[i]: i (1: ;0: )*/
int upBiasFlag[2*MAXN+1]; /*upBiasFlag[i]: i ( ) (1: ;0: )*/
int dnBiasFlag[2*MAXN+1]; /*dnBiasFlag[i]: i ( ) (1: ;0: )*/
//
void ArrangeQueen()
{
int i;
char answer;
printf(" :");
scanf("%d",&n);
for(i=0;i<=n;i++) /* */
ColFlag[i] = 1;
for(i=0;i<=2*n;i++)
upBiasFlag[i] = dnBiasFlag[i] = 1;
m = 1;
ColFlag[1] = 1;
NotCatch = 1;
ColFlag[0] = 0;
do
{
if(NotCatch)
{
if(m==n)
{
printf(" ");
for(i=1;i<=n;i++) /* , */
printf("%3d %3d ",i,ColFlag[i]);
printf(" (Q/q for Exit)? ");
scanf("%c",&answer);
if(answer=='Q' || answer=='q')
exit(0);
while(ColFlag[m] == n)
{
m--; /* m-1 , RowFlag[ColFlag[m-1]] */
RowFlag[ColFlag[m]] = upBiasFlag[m+ColFlag[m]] = dnBiasFlag[n+m-ColFlag[m]] = 1;
}
ColFlag[m]++; /* m ( )*/
}
else
{
/* m , RowFlag[ColFlag[m-1]] */
RowFlag[ColFlag[m]] = upBiasFlag[m+ColFlag[m]] = dnBiasFlag[n+m-ColFlag[m]] = 0;
ColFlag[++m] = 1; /* */
}
}
else
{
while(ColFlag[m]==n) /* */
{
m--; /* m-1 , RowFlag[ColFlag[m-1]] */
RowFlag[ColFlag[m]] = upBiasFlag[m+ColFlag[m]] = dnBiasFlag[n+m-ColFlag[m]] = 1;
}
ColFlag[m]++; /* m ( )*/
}
NotCatch = RowFlag[ColFlag[m]] && upBiasFlag[m+ColFlag[m]] && dnBiasFlag[n+m-ColFlag[m]];
}while(m!=0);
}
void dArrange_Queen_All(int k,int n)
{
int i,j;
char answer;
for(i=1;i<=n;i++)
{
if(RowFlag[i] && upBiasFlag[k+i] && dnBiasFlag[n+k-i])
{
ColFlag[k] = i;
RowFlag[i] = upBiasFlag[k+i] = dnBiasFlag[n+k-i] = 0;
if(k==0)
{
printf(" ");
for(j=1;j<=n;j++) /* , */
printf("%3d %3d ",i,ColFlag[i]);
printf(" (Q/q for Exit)? ");
scanf("%c",&answer);
if(answer=='Q' || answer=='q')
exit(0);
}
else
dArrange_Queen_All(k+1,n);
RowFlag[i] = upBiasFlag[k+i] = dnBiasFlag[n+k-i] = 1;
}
}
}
void dArrangeQueenAll()
{
int i;
printf(" :");
scanf("%d",&n);
for(i=0;i<=n;i++) /* */
ColFlag[i] = 1;
for(i=0;i<=2*n;i++)
upBiasFlag[i] = dnBiasFlag[i] = 1;
dArrange_Queen_All(1,n);
}