1 //Result:wizmann 1324 Accepted 3112K 3454MS G++ 3200B 2 //What's Wrong: 3 // 1.位压缩的效率,减少无关位 4 // 2.蛇的走动方向没有经过检测 5 // 3.没有自己出数据检验 6 // 4.对于某些数据相当然了 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 15 using namespace std; 16 17 #define SIZE 21 18 #define INF 1<<25 19 #define STATUS 1<<14 20 #define print(x) cout< < q; 76 bitset visit[SIZE][SIZE]; 77 //char visit[SIZE][SIZE][STATUS]; 78 int stone_num; 79 80 inline bool inMap(int x,int y) 81 { 82 if(x>0 && x<=m && y>0 && y<=n) return true; 83 else return false; 84 } 85 86 int moveSnake(int x,int y,snake& py) 87 { 88 for(int i=0;i >ptr;115 //print("DIR:"< =ans || visit[now_y][now_x][now.status]) continue;141 if(now_x==1 && now_y==1)142 {143 ans=now.step;144 continue;145 }146 visit[now_y][now_x][now.status]=1;147 148 point head=now.head;149 150 for(int i=0;i<4;i++)151 {152 int nx=head.x+mx[i];153 int ny=head.y+my[i];154 if(!inMap(nx,ny)) continue;155 snake npy=now;156 int nstatus=moveSnake(nx,ny,npy);157 //print(nstatus);158 if(nstatus==-1) continue;159 else q.push(npy);160 }161 }162 return ans;163 }164 165 166 int main()167 {168 int cas=1;169 point body[10];170 while(scanf("%d%d%d",&n,&m,&l)!=EOF && n+m+l)171 {172 snake py;173 int a,b;174 for(int i=0;i =INF) ans=-1;201 202 printf("Case %d: %d\n",cas++,ans);203 }204 return 0;205 }