1 #include2 #include 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 else68 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 else77 bl[i+1][j]=0;78 }79 }80 dfs(1,1);81 return 0;82 }
一个非常恶心的搜索。