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 |
写了好长,复制粘贴改的手疼。0.0#include<stdio.h> #include<string.h> int a,b,c,flag;//flag标记是否成功找到结果 struct node { char s[20]; int x,y,behind,step; } w[10100]; void print(int i)//回溯输出 { if(w[i].behind!=-1) { print(w[i].behind); printf("%s\n",w[i].s); } } int vis[110][110]; void bfs() { int head=0,tail=1; w[0].x=0,w[0].y=0,w[0].behind=-1,w[0].step=0; vis[0][0]=1; while(head<tail) { node now=w[head]; // printf("now.x=%d now.y=%d now.step=%d \n",now.x,now.y,now.step); if(now.x==c||now.y==c) { flag=0; printf("%d\n",now.step); print(now.behind); printf("%s\n",now.s); break; } if(!vis[a][now.y]&&now.x==0)//FILL a { vis[a][now.y]=1; w[tail].x=a; strcpy(w[tail].s,"FILL(1)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].y=now.y; tail++; } if(now.x==a) { if(!vis[0][now.y])//DROP a { vis[0][now.y]=1; w[tail].x=0; strcpy(w[tail].s,"DROP(1)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].y=now.y; tail++; } if(now.y!=b)//POUR(1,2) { if(now.x>(b-now.y)&&!vis[now.x-b+now.y][b]) { vis[now.x-b+now.y][b]=1; w[tail].x=now.x-(b-now.y); w[tail].y=b; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(1,2)"); tail++; } else if(now.x<=(b-now.y)&&!vis[0][now.x+now.y]) { vis[0][now.x+now.y]=1; w[tail].x=0; w[tail].y=now.y+now.x; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(1,2)"); tail++; } } } else if(now.x>0&&now.x<a) { if(!vis[a][now.y])//FILL 1 { vis[a][now.y]=1; w[tail].x=a; strcpy(w[tail].s,"FILL(1)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].y=now.y; tail++; } if(!vis[0][now.y])//DROP 1 { vis[0][now.y]=1; w[tail].x=0; strcpy(w[tail].s,"DROP(1)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].y=now.y; tail++; } if(now.y!=b) { if(now.x>(b-now.y)&&!vis[now.x-b+now.y][b])//POUR(1,2) { vis[now.x-b+now.y][b]=1; w[tail].x=now.x-(b-now.y); w[tail].y=b; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(1,2)"); tail++; } else if(now.x<=(b-now.y)&&!vis[0][now.x+now.y])//POUR(1,2) { vis[0][now.x+now.y]=1; w[tail].x=0; w[tail].y=now.y+now.x; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(1,2)"); tail++; } } } if(now.y==0&&!vis[now.x][b])//FILL 2 { vis[now.x][b]=1; w[tail].y=b; strcpy(w[tail].s,"FILL(2)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].x=now.x; tail++; } else if(now.y==b) { if(!vis[now.x][0])//DROP 2 { vis[now.x][0]=1; w[tail].y=0; strcpy(w[tail].s,"DROP(2)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].x=now.x; tail++; } if(now.x!=a) { if(now.y>(a-now.x)&&!vis[a][now.y-a+now.x])//POUR (2,1) { vis[a][now.y-a+now.x]=1; w[tail].y=now.y-(a-now.x); w[tail].x=a; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(2,1)"); tail++; } else if(now.y<=(a-now.x)&&!vis[now.x+now.y][0])//POUR (2,1) { vis[now.x+now.y][0]=1; w[tail].y=0; w[tail].x=now.y+now.x; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(2,1)"); tail++; } } } else if(now.y>0&&now.y<b) { if(!vis[now.x][b])//FILL 2 { vis[now.x][b]=1; w[tail].y=b; strcpy(w[tail].s,"FILL(2)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].x=now.x; tail++; } if(!vis[now.x][0])//DROP 2 { vis[now.x][0]=1; w[tail].y=0; strcpy(w[tail].s,"DROP(2)"); w[tail].behind=head; w[tail].step=now.step+1; w[tail].x=now.x; tail++; } if(now.x!=a) { if(now.y>(a-now.x)&&!vis[a][now.y-a+now.x])//POUR (2,1) { vis[a][now.y-a+now.x]=1; w[tail].y=now.y-(a-now.x); w[tail].x=a; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(2,1)"); tail++; } else if(now.y<=(a-now.x)&&!vis[now.x+now.y][0])//POUR (2,1) { vis[now.x+now.y][0]=1; w[tail].y=0; w[tail].x=now.y+now.x; w[tail].behind=head; w[tail].step=now.step+1; strcpy(w[tail].s,"POUR(2,1)"); tail++; } } } head++; } } int main() { while(~scanf("%d%d%d",&a,&b,&c)) { memset(vis,0,sizeof(vis)); flag=1; bfs(); if(flag) 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