nyist 21 三個水杯(BFS)

來源:互聯網
上載者:User

六中情況:

 1->2

2->1

1->3

3->1

2->3

3->2

#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <cmath>#include <queue>using namespace std;struct shuibei{int x,y,z,step;}e;int v1,v2,v3;int bz[105][105][105];queue<shuibei> q;int bfs(shuibei s){int i,j,x,y,z; shuibei t,tt;while(!q.empty()) q.pop();q.push(s); bz[s.x][s.y][s.z]=1;while(!q.empty()){t=q.front(); q.pop();//杯1不空,杯2不滿 1->2 if(t.x!=0&&t.y<v2){if(t.y+t.x>v2)//倒不完,能滿為止 {x=t.x-(v2-t.y);y=v2;z=t.z;}else if(t.y+t.x<=v2) //可以倒完,直接倒完 {y=t.x+t.y;x=0;z=t.z;}if(x==e.x&&y==e.y&&e.z==z)  return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯2不空,杯1不滿 2->1 if(t.y!=0&&t.x<v1){if(t.y+t.x>v1)//倒不完,能滿為止 {y=t.y-(v1-t.x);x=v1;z=t.z;}else if(t.y+t.x<=v1) //可以倒完,直接倒完 {x=t.x+t.y;y=0;z=t.z;}if(x==e.x&&y==e.y&&e.z==z)  return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯1不空,杯3不滿 1->3 if(t.x!=0&&t.z<v3){if(t.z+t.x>v3)//倒不完,能滿為止 {x=t.x-(v3-t.z);z=v3;y=t.y;}else if(t.z+t.x<=v3) //可以倒完,直接倒完 {z=t.x+t.z;x=0;y=t.y;}if(x==e.x&&y==e.y&&e.z==z)  return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯3不空,杯1不滿 3->1 if(t.z!=0&&t.x<v1){if(t.z+t.x>v1)//倒不完,能滿為止 {z=t.z-(v1-t.x);x=v1;y=t.y;}else if(t.z+t.x<=v1) //可以倒完,直接倒完 {x=t.x+t.z;z=0;y=t.y;}if(x==e.x&&y==e.y&&e.z==z)  return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯2不空,杯3不滿 2->3 if(t.y!=0&&t.z<v3){if(t.z+t.y>v3)//倒不完,能滿為止 {y=t.y-(v3-t.z);z=v3;x=t.x;}else if(t.z+t.y<=v3) //可以倒完,直接倒完 {z=t.y+t.z;y=0;x=t.x;}if(x==e.x&&y==e.y&&e.z==z)  return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯3不空,杯2不滿 3->2 if(t.z!=0&&t.y<v2){if(t.z+t.y>v2)//倒不完,能滿為止 {z=t.z-(v2-t.y);y=v2;x=t.x;}else if(t.z+t.y<=v2) //可以倒完,直接倒完 {y=t.y+t.z;z=0;x=t.x;}if(x==e.x&&y==e.y&&e.z==z)  return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}}return -1;}int main(int argc, char *argv[]){int t,i,j;shuibei s;cin>>t;while(t--){memset(bz,0,sizeof(bz));cin>>v1>>v2>>v3;cin>>e.x>>e.y>>e.z;s.x=v1; s.y=s.z=0; s.step=0;if(s.x==e.x&&s.y==e.y&&s.z==e.z) cout<<0<<endl;else cout<<bfs(s)<<endl;}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.