| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
1.2kb代码供参考~#include <cstdio>
#include <cstring>
#define M 105
char vis[M][M], px[M][M], py[M][M], op[M][M], qx[M*M], qy[M*M];
int a, b, c, d[M][M], h, t;
void printop(char i) {
char *s;
if(i == 0) s = "FILL(1)";
else if(i == 1) s = "FILL(2)";
else if(i == 2) s = "DROP(1)";
else if(i == 3) s = "DROP(2)";
else if(i == 4) s = "POUR(1,2)";
else s = "POUR(2,1)";
printf("%s\n", s);
}
void push(int x, int y, int tx, int ty, int o) {
if(!vis[x][y]) {
qx[t] = x, qy[t++] = y;
op[x][y] = o, d[x][y] = d[tx][ty] + 1;
px[x][y] = tx, py[x][y] = ty, vis[x][y] = 1;
}
}
void print(int x, int y) {
if(d[x][y]) {
print(px[x][y], py[x][y]);
printop(op[x][y]);
}
}
int main() {
int x, y, tx, ty, td;
scanf("%d%d%d", &a, &b, &c);
memset(vis, 0, sizeof(vis));
vis[0][0] = t = 1, d[0][0] = qx[0] = qy[0] = h = 0;
while(h < t) {
x = qx[h], y = qy[h];
if(x == c || y == c) {
printf("%d\n", d[x][y]);
print(x, y);
break;
}
h++;
push(a, y, x, y, 0);
push(x, b, x, y, 1);
push(0, y, x, y, 2);
push(x, 0, x, y, 3);
td = (x < b-y) ? x : b-y;
push(x-td, y+td, x, y, 4);
td = (y < a-x) ? y : a-x;
push(x+td, y-td, x, y, 5);
}
if(h >= t) printf("impossible\n");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator