[心得] //0.004
在西洋棋得棋盤中你可以放置8個皇后而且彼此都不衝突(就是都不能吃到對方)。給你某一個皇后的位置,請你寫一個程式來輸出所有這樣可能的安排。
#include <stdio.h>
#define MAXSIZE 8
int map[MAXSIZE+1],left[2*MAXSIZE+1],right[2*MAXSIZE+1],answer[MAXSIZE+1];
int a,b;
int counter;
void queen(int x)
{
int i;
if(x == b)
++x;
if(x==9)
{
printf( "%2d ", ++counter );
for ( i = 1; i <= MAXSIZE; i++ )
{
printf( " %d", answer[ i ] );
}
printf("\n");
return;
}
for(i = 1; i <= MAXSIZE;i++)
{
int L = i-x+MAXSIZE;
int R = i+x;
if(!left[L]&&!right[R]&& !map[i])
{
left[L] = right[R]=map[i]=1;
answer[x]=i;
queen(x+1);
left[L] = right[R]=map[i]=0;
}
}
}
int main()
{
int data;
scanf("%d",&data);
while(data--)
{
scanf("%d %d",&a,&b);
memset(map, 0, sizeof(int)*(MAXSIZE+1));
memset(left, 0, sizeof(int)*(2*MAXSIZE+1));
memset(right,0, sizeof(int)*(2*MAXSIZE+1));
left[a-b+MAXSIZE]=1;
right[a+b]=1;
map[a]=1;
answer[b]=a;
counter = 0;
printf( "SOLN COLUMN\n # 1 2 3 4 5 6 7 8\n\n" );
queen(1);
if(data )
printf("\n");
}
//return 0;
system("pause");
}
沒有留言:
張貼留言