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 |
大牛们啊,帮小弟看下为何RE啊#pragma warning (disable: 4786) #include <iostream> #include <stack> #include <string> #include <memory> using namespace std; struct jh { int a1,a2; }; int main() { int a1=0,a2=0,m=0,n=0,ans=0; //A1,A2表示单前桶中水的数量 ,m,n分别为童的容量 // int used[100][100]={0}; //如果某个组合已经被使用,则不进入队列。 cin>>m>>n>>ans; jh BFS[80536]; //存储解空间的队列 //下面开始搜索 int i=1; memset(BFS,0,sizeof(BFS)); while(true) { /*if(used[100][100]) { i++; continue; }*/ switch(i%6) { case 1: { BFS[i].a1=m;BFS[i].a2=BFS[(i-1)/6].a2; if(BFS[i].a1==ans || BFS[i].a2==ans) goto end;}break; case 2: {BFS[i].a1=0;BFS[i].a2=BFS[(i-1)/6].a2;}break; case 3: { BFS[i].a2=BFS[(i-1)/6].a1+BFS[(i-1)/6].a2; BFS[i].a1=0; if(BFS[i].a2>n) { BFS[i].a1=BFS[i].a2-n; BFS[i].a2=n; } if(BFS[i].a1==ans || BFS[i].a2==ans) goto end; } break; case 4: {BFS[i].a2=n; BFS[i].a1=BFS[(i-1)/6].a1; if(BFS[i].a1==ans || BFS[i].a2==ans) goto end;}break; case 5: {BFS[i].a2=0; BFS[i].a1=BFS[(i-1)/6].a1; }break; case 0: { BFS[i].a1=BFS[(i-1)/6].a1+BFS[(i-1)/6].a2; BFS[i].a2=0; if(BFS[i].a1>m) { BFS[i].a2=BFS[i].a1-m; BFS[i].a1=m; } if(BFS[i].a1==ans || BFS[i].a2==ans) goto end; } break; } i++; } if(i>70000) cout<<"impossible\n"; end: stack<string> str; while(i!=0) { switch(i%6) { case 1: str.push("FILL(1)\n"); break; case 2: str.push("DROP(1)\n");break; case 3: str.push("POUR(1,2)\n");break; case 4: str.push("FILL(2)\n");break; case 5: str.push("DROP(2)\n");break; case 0: str.push("POUR(2,1)\n");break; } i=(i-1)/6; } cout<<str.size()<<endl; while(!str.empty()) { cout<<str.top(); str.pop(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator