1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int ha[10][10],li[10][10],xi[10][10],a[10][10],bh[10][10],bl[10][10],kg; 5 char ch[5]; 6 bool pan(int x,int y,int i) 7 { 8 if(ha[x][i]||li[y][i]||xi[(x-1)/3*3+(y-1)/3][i]) 9 return 0; 10 if((y-1)%3!=0&&(bh[x][y]^(i>a[x][y-1]))) 11 return 0; 12 if((x-1)%3!=0&&(bl[x][y]^(i>a[x-1][y]))) 13 return 0; 14 return 1; 15 } 16 void dfs(int x,int y) 17 { 18 //if(a[1][1]==4&&a[1][2]==9&&a[1][3]==1&&a[1][4]==7&&a[1][5]==3&&a[1][6]==6&&a[1][7]==5&&a[1][8]==2) 19 //{ 20 //printf(" "); 21 //} 22 if(kg) 23 return; 24 if(y==10) 25 { 26 x++; 27 y=1; 28 } 29 if(x==10) 30 { 31 kg=1; 32 for(int i=1;i<=9;i++) 33 { 34 for(int j=1;j<=9;j++) 35 { 36 printf("%d",a[i][j]); 37 if(j!=9) 38 printf(" "); 39 } 40 printf("\n"); 41 } 42 return; 43 } 44 for(int i=1;i<=9;i++) 45 if(pan(x,y,i)) 46 { 47 a[x][y]=i; 48 ha[x][i]=1; 49 li[y][i]=1; 50 xi[(x-1)/3*3+(y-1)/3][i]=1; 51 dfs(x,y+1); 52 ha[x][i]=0; 53 li[y][i]=0; 54 xi[(x-1)/3*3+(y-1)/3][i]=0; 55 } 56 } 57 int main() 58 { 59 for(int i=1;i<=9;i++) 60 { 61 for(int j=1;j<9;j++) 62 if(j%3) 63 { 64 scanf("%s",ch); 65 if(ch[0]=='<') 66 bh[i][j+1]=1; 67 else 68 bh[i][j+1]=0; 69 } 70 if(i%3) 71 for(int j=1;j<=9;j++) 72 { 73 scanf("%s",ch); 74 if(ch[0]=='^') 75 bl[i+1][j]=1; 76 else 77 bl[i+1][j]=0; 78 } 79 } 80 dfs(1,1); 81 return 0; 82 }
一个非常恶心的搜索。