poj1166

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int clock[3][3];
 5 int clo[3][3];
 6 int movel[9][3][3]={1,1,0,1,1,0,0,0,0,
 7                    1,1,1,0,0,0,0,0,0,
 8                    0,1,1,0,1,1,0,0,0,
 9                    1,0,0,1,0,0,1,0,0,
10                    0,1,0,1,1,1,0,1,0,
11                    0,0,1,0,0,1,0,0,1,
12                    0,0,0,1,1,0,1,1,0,
13                    0,0,0,0,0,0,1,1,1,
14                    0,0,0,0,1,1,0,1,1};
15 int num[10]={0};
16 int n=0;
17 int nu[10000];
18 int minn=10000;
19 int minnu[10000];
20 void zhuan(int step);
21 void zhizhen();
22 bool same();
23 int main()
24 {
25     for(int i=0;i<3;i++)
26         for(int j=0;j<3;j++)
27             cin >>clock[i][j];
28     zhuan(0);
29     for(int i=0;i<minn;i++)
30         cout <<minnu[i]<<" ";
31     return 0;
32 }
33 
34 void zhuan(int step)
35 {
36     if(step==9)
37     {
38         n=0;
39         zhizhen();
40         if(same()&&n<minn)
41         {
42             minn=n;
43             for(int i=0;i<minn;i++)
44                 minnu[i]=nu[i];
45         }
46         return;
47     }
48     for(int i=0;i<4;i++)
49     {
50         num[step]=i;
51         zhuan(step+1);
52     }
53 }
54 
55 void zhizhen()
56 {
57     for(int i=0;i<3;i++)
58     {
59         for(int j=0;j<3;j++)
60             clo[i][j]=clock[i][j];
61     }
62     for(int i=0;i<9;i++)
63     {
64         for(int m=0;m<num[i];m++)
65         {
66             nu[n]=i+1;
67             n++;
68             for(int j=0;j<3;j++)
69             {
70                 for(int k=0;k<3;k++)
71                     clo[j][k]=(clo[j][k]+movel[i][j][k])%4;    
72             }        
73         }
74     }
75 }
76 bool same()
77 {
78     bool ret=true;
79     for(int i=0;i<3;i++)
80     {
81         for(int j=0;j<3;j++)
82         {
83             if(clo[i][j]!=0)
84             {
85                 ret=false;
86             }
87         }
88     }
89     return ret;
90 }

 

posted @ 2017-01-24 14:56  jintg  阅读(124)  评论(0编辑  收藏  举报