1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #include <stdio.h> #include <stdlib.h> int n; int c[8][8],al[8]={0},ak[8]={0},b1[15]={0},b2[15]={0};
int pu(int); void pfor(int[][8]); void qq(int,int,int); void remo(int[],int);
int main(int argc, char *argv[]) { scanf("%d",&n); for(int i=0;i<n;i++){ int pp=1; remo(al,8); remo(ak,8); remo(b1,15); remo(b2,15); for(int l=0;l<8;l++) for(int k=0;k<8;k++){ scanf("%d",&c[l][k]); if(c[l][k]==1) if(al[l]==0&&ak[k]==0)qq(l,k,1); else pp=-1; } if(pp==-1)printf("-1\n"); else if(pu(0)==-1)printf("-1\n"); else pfor(c); } return 0; }
int pu(int dr) { if(dr==7){ if(al[dr]==1)return 1; else{ for(int i=0;i<8;i++){ if(ak[i]>0)continue; if(b1[dr+i]>0||b2[7-i+dr]>0)continue; qq(dr,i,1); return 1; } return -1; } } if(al[dr]>0)return pu(dr+1); for(int i=0;i<8;i++){ if(ak[i]>0)continue; if(b1[dr+i]>0||b2[7-i+dr]>0)continue; qq(dr,i,1); if(pu(dr+1)==-1)qq(dr,i,0); else return 1; } return -1; }
void remo(int T[],int t) { for(int i=0;i<t;i++) T[i]=0; return; }
void qq(int x,int y,int Q) { c[x][y]=Q; al[x]=Q; ak[y]=Q; b1[x+y]=Q; b2[7-y+x]=Q; return; }
void pfor(int W[][8]) { for(int h=0;h<8;h++) printf("%d %d %d %d %d %d %d %d\n",W[h][0],W[h][1],W[h][2],W[h][3],W[h][4],W[h][5],W[h][6],W[h][7]); return; }
|