心得:WA原因 沒有考慮全為0的狀況,所以WA!
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE 8
int sum=0;;
int answer =0;
int queen[MAXSIZE+1][MAXSIZE+1];
int queen_display[MAXSIZE+1];
int left_diag[2*MAXSIZE+1];
int right_diag[2*MAXSIZE+1];
int column_map[MAXSIZE+1];
void print_queen(){
int i,j;
sum=0;
for(i=1;i<=MAXSIZE;i++){
for(j=1;j<=MAXSIZE;j++){
if(queen_display[i]==j)
sum= sum +queen[i][j];
}
}
}
void max_queen(int sum)
{
if(answer <sum)
answer=sum;
sum=0;
}
void queens(int x)
{
int j;
if(x>MAXSIZE){
print_queen();
max_queen(sum);
}
else{
for(j=1;j<=MAXSIZE;j++){
int R =x-j+MAXSIZE;
int L=x+j;
if(left_diag[L]&&right_diag[R]&&column_map[j]){
queen_display[x]=j;
left_diag[L]=right_diag[R]=column_map[j]=0;
queens(x+1);
left_diag[L]=right_diag[R]=column_map[j]=1;
}
}
}
}
int main()
{
int i,j,data;
scanf("%d",&data);
while(data--){
for(i=1;i<=MAXSIZE;i++){
for(j=1;j<=MAXSIZE;j++){
scanf("%d",&queen[i][j]);
}
}
for(i=1;i<=2*MAXSIZE;i++)
left_diag[i] = right_diag[i]=1;
for(i=1;i<=MAXSIZE;i++)
column_map[i]=1;
queens(1);
printf("%5d\n",answer);
}
//return 0;
system("pause");
}
沒有留言:
張貼留言