2011年12月29日 星期四

C ACM 167 (試過很多測試答案 都對了 為什麼過不了?)

心得: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");   
}

沒有留言:

張貼留言