HDU1495 非常可乐【倒水问题+BFS】
2018-03-22 21:38
453 查看
由于没有刻度,所以只能是倒完或者说是将所倒的那个容器倒满,所以说得分6种情况考虑,每种情况还要再细分两种情况考虑。
#include<stdio.h> #include<string.h> #include<iostream> #include<vector> #include<set> #include<map> #include<queue> #include<ctype.h> #include<stack> #include<math.h> #include <string> #include<algorithm> using namespace std; typedef unsigned long long ULL; int s,n,m; struct node { int s; int n; int m; int step; }first; bool book[101][101][101]; int bfs() { int s2; if(s%2!=0) return -1; s2=s/2; queue<node> q; first.s=s; first.n=0; first.m=0; first.step=0; q.push(first); book[s][0][0]=true; while(!q.empty()) { node t=q.front(); q.pop(); if((t.m==s2&&t.n==s2)||(t.m==s2&&t.s==s2)||(t.n==s2&&t.s==s2)) return t.step; node v; //s-->n; if(t.s&&n-t.n>0) { if(t.s& 4000 gt;n-t.n) { v.s=t.s-(n-t.n); v.n=n; v.m=t.m; } else { v.s=0; v.n=t.n+t.s; v.m=t.m; } if(!book[v.s][v.n][v.m]) { v.step=t.step+1; book[v.s][v.n][v.m]=true; q.push(v); } } //s-->m; if(t.s&&m-t.m>0) { if(t.s>m-t.m) { v.s=t.s-(m-t.m); v.m=m; v.n=t.n; } else { v.s=0; v.m=t.m+t.s; v.n=t.n; } if(!book[v.s][v.n][v.m]) { book[v.s][v.n][v.m]=true; v.step=t.step+1; q.push(v); } } //n-->s if(t.n&&s-t.s>0) { if(t.n>s-t.s) { v.n=t.n-(s-t.s); v.s=s; v.m=t.m; } else { v.n=0; v.s=t.n+t.s; v.m=t.m; } if(!book[v.s][v.n][v.m]) { book[v.s][v.n][v.m]=true; v.step=t.step+1; q.push(v); } } //n-->m if(t.n&&m-t.m>0) { if(t.n>m-t.m) { v.n=t.n-(m-t.m); v.m=m; v.s=t.s; } else { v.n=0; v.m=t.n+t.m; v.s=t.s; } if(!book[v.s][v.n][v.m]) { book[v.s][v.n][v.m]=true; v.step=t.step+1; q.push(v); } } //m-->s if(t.m&&(s-t.s>0)) { if(t.m>s-t.s) { v.m=t.m-(s-t.s); v.s=s; v.n=t.n; } else { v.m=0; v.s=t.m+t.s; v.n=t.n; } if(!book[v.s][v.n][v.m]) { book[v.s][v.n][v.m]=true; v.step=t.step+1; q.push(v); } } //m-->n if(t.m&&n-t.n>0) { if(t.m>n-t.n) { v.m=t.m-(n-t.n); v.n=n; v.s=t.s; } else { v.m=0; v.n=t.m+t.n; v.s=t.s; } if(!book[v.s][v.n][v.m]) { book[v.s][v.n][v.m]=true; v.step=t.step+1; q.push(v); } } } return -1; } int main() { ios::sync_with_stdio(false);cin.tie(0); while(cin>>s>>n>>m&&(s||n||m)) { memset(book,false,sizeof(book)); int mini=bfs(); if(mini==-1) cout<<"NO"<<endl; else cout<<mini<<endl; } return 0; }
相关文章推荐
- HDU 1495 非常可乐(BFS 倒水问题)
- HDU - 1495 非常可乐(倒水问题BFS)
- hdu 1495 非常可乐 BFS+倒水问题
- BFS(倒水问题) HDU 1495 非常可乐
- 非常可乐 HDU - 1495 倒水问题 BFS && 数论解法
- HDU 1495 很可乐(BFS 倒水问题)
- HDU 1495 非常可乐(BFS:3杯倒水)
- hdu 1495 非常可乐(BFS)
- 搜索专题(BFS)HDU 1495-非常可乐
- HDU1495 非常可乐【倒水问题+BFS】
- HDU-1495 非常可乐 BFS
- HDU 1495 非常可乐 bfs状态空间搜索
- hdu 1495 非常可乐(bfs)
- HDU 1495 非常可乐(bfs)|POJ 3414 Pots(bfs+打印路径)
- HDU 1495--非常可乐【BFS】
- HDU 1495 非常可乐 (BFS)
- hdu1495 非常可乐--BFS
- HDU 1495 非常可乐(数论,BFS)
- HDU 1495 非常可乐(BFS)
- 非常可乐 hdu 1495 BFS