Question: Can you put a given figure in a 4x4 square with no more than 6 2x2 square paper?
Topic Analysis: Violence to cite P (9,6) species (worst case) program can be.
The code is as follows:
# include<iostream># include<cstdio># include<cstring># include<algorithm>using namespace Std;int Vis[10];char Mp[8][15],p1[8][15];bool judge () {for (Int. i=0;i<5;++i) for (int j=0;j<9;++j) if (Mp[i][j]!=p1[i][j]) return false; return true;} BOOL Dfs (int step) {if (judge ()) return true; if (step>=6) return false; Char p2[6][10]; for (int. i=0;i<5;++i) for (int j=0;j<9;++j) P2[I][J]=P1[I][J]; for (int i=0;i<9;++i) {if (vis[i]) continue; Vis[i]=1; int r=i/3,c=2* (i%3) +1; P1[r][c]=p1[r][c+2]=p1[r+2][c]=p1[r+2][c+2]= ' _ '; P1[r+1][c-1]=p1[r+2][c-1]=p1[r+1][c+3]=p1[r+2][c+3]= ' | '; P1[r+1][c]=p1[r+1][c+1]=p1[r+1][c+2]=p1[r+2][c+1]= "; if (Dfs (step+1)) return true; vis[i]=0; for (int. i=0;i<5;++i) for (int j=0;j<9;++j) P1[I][J]=P2[I][J]; } return false;} int main () { int cas=0; while (1) {for (int i=0;i<5;++i) {gets (mp[i]); if (mp[i][0]== ' 0 ') return 0; } printf ("Case%d:", ++cas); for (int. i=0;i<5;++i) for (int j=0;j<9;++j) p1[i][j]= "; memset (vis,0,sizeof (VIS)); if (Dfs (0)) printf ("yes\n"); else printf ("no\n"); } return 0;}
UVA-12113 overlapping squares (backtracking + violence)