CodeChef submission 108866 (C) plaintext list. Status: CE, problem H1, contest OCT09. By Talha (Talha), 2009-10-11 14:43:25.
// program to solve puzzle from code chef #include<iostream.h> #include<conio.h> class puzzle { public: int a[3][3]; int count_1,count_2; void solve(puzzle &B); int compare_left(int &i, int &j); int compare_right(int &i, int &j); int compare_up(int &i, int &j); int compare_down(int &i, int &j); puzzle(); void swap(int &x, int &y); }; puzzle::puzzle() { count_1=count_2=0; } void puzzle::solve(puzzle &B) { count_1=count_2=0; while(!(B.a[0][0]==1 && B.a[0][1]==2 && B.a[0][2]==3 && B.a[1][0]==4 && B.a[1][1]==5 && B.a[1][2]==6 && B.a[2][0]==7 && B.a[2][1]==8 && B.a[2][2]==9)) { if(count_2>10000) { cout<<"\n-1 "<<endl; return ; } else { for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(i==0) { if(j==0) { if(B.compare_right(a[i][j], a[i][j+1])) B.swap(B.a[i][j], B.a[i][j+1]); if(B.compare_down(a[i][j], a[i+1][j])) B.swap(B.a[i][j], B.a[i+1][j]); } if(j==1) { if(B.compare_right(a[i][j], a[i][j+1])) B.swap(B.a[i][j], B.a[i][j+1]); if(B.compare_down(a[i][j], a[i+1][j])) B.swap(B.a[i][j], B.a[i+1][j]); if(B.compare_left(a[i][j], a[i][j-1])) B.swap(B.a[i][j], B.a[i][j-1]); } if(j==2) { if(B.compare_down(a[i][j], a[i+1][j])) B.swap(B.a[i][j], B.a[i+1][j]); if(B.compare_left(a[i][j], a[i][j-1])) B.swap(B.a[i][j], B.a[i][j-1]); } } if(i==1) { if(j==0 ) { if(B.compare_right(a[i][j], a[i][j+1])) B.swap(B.a[i][j], B.a[i][j+1]); if(B.compare_down(a[i][j], a[i+1][j])) B.swap(B.a[i][j], B.a[i+1][j]); if(B.compare_up(a[i][j], a[i-1][j])) B.swap(B.a[i][j], B.a[i-1][j]); } if(j==1) { if(B.compare_right(a[i][j], a[i][j+1])) B.swap(B.a[i][j], B.a[i][j+1]); if(B.compare_down(a[i][j], a[i+1][j])) B.swap(B.a[i][j], B.a[i+1][j]); if(B.compare_left(a[i][j], a[i][j-1])) B.swap(B.a[i][j], B.a[i][j-1]); if(B.compare_up(a[i][j], a[i-1][j])) B.swap(B.a[i][j], B.a[i-1][j]); } if(j==2) { if(B.compare_down(a[i][j], a[i+1][j])) B.swap(B.a[i][j], B.a[i+1][j]); if(B.compare_up(a[i][j], a[i-1][j])) B.swap(B.a[i][j], B.a[i-1][j]); if(B.compare_left(a[i][j], a[i][j-1])) B.swap(B.a[i][j], B.a[i][j-1]); } } if(i==2) { if(j==0) { if(B.compare_right(a[i][j], a[i][j+1])) B.swap(B.a[i][j], B.a[i][j+1]); if(B.compare_up(a[i][j], a[i-1][j])) B.swap(B.a[i][j], B.a[i-1][j]); } if(j==1) { if(B.compare_right(a[i][j], a[i][j+1])) B.swap(B.a[i][j], B.a[i][j+1]); if(B.compare_up(a[i][j], a[i-1][j])) B.swap(B.a[i][j], B.a[i-1][j]); if(B.compare_left(a[i][j], a[i][j-1])) B.swap(B.a[i][j], B.a[i][j-1]); } if(j==2) { if(B.compare_up(a[i][j], a[i-1][j])) B.swap(B.a[i][j], B.a[i-1][j]); if(B.compare_left(a[i][j], a[i][j-1])) B.swap(B.a[i][j], B.a[i][j-1]); } } } } } } cout<<"\n"<<count_1<<endl; } int puzzle::compare_left(int &i, int &j) { count_2++; int p=i+j; if(p==3 || p==5 || p==7 || p==11 || p==13 || p==17) return 1; return 0; } int puzzle::compare_right(int &i, int &j) { count_2++; // cout<<"i,j are: "<<i<<" "<<j<<endl; int p; p= i+j; // cout<<"P is: "<<p<<endl; if(p==3 || p==5 || p==7 || p==11 || p==13 || p==17) return 1; return 0; } int puzzle::compare_up(int &i, int &j) { count_2++; int p= i+j; if(p==3 || p==5 || p==7 || p==11 || p==13 || p==17) return 1; return 0; } int puzzle::compare_down(int &i, int &j) { count_2++; int p= i+j; if(p==3 || p==5 || p==7 || p==11 || p==13 || p==17) return 1; return 0; } void puzzle::swap(int &a, int &b) { int hold; hold=a; a=b; b=hold; count_1++; } int main() { int m; clrscr(); // cout<<"Enter no. of test cases: "; // cin>>m; puzzle P;//[50]; // for(int k=0;k<m;k++) //{ cout<<"\nEnter elements for "<<m<<" (st)(nd)th case: \n"; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) cin>>P.a[i][j]; } // } // for(int i=0;i<m;i++) P.solve(P); getch(); return 0; }
Comments

