hdoj1495简单BFS
来源:互联网 发布:数据库事务特性 老婆 编辑:程序博客网 时间:2024/06/13 23:18
#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#include <iostream>using namespace std;#define LL __int64#define mod 9973#define N 100010int n,m,s;bool vis[102][110][110];struct asd{ int cup1; int cup2; int cup3; int step;};asd q[N];int head,tail;void bfs(){ memset(vis,0,sizeof(vis)); head=0;tail=1; q[head].cup1=s; q[head].cup2=0; q[head].cup3=0; q[head].step=0; vis[s][0][0]=1; int x,y,z; while(head<tail) { int a=q[head].cup1; int b=q[head].cup2; int c=q[head].cup3; if(a==b&&a==s/2) { printf("%d\n",q[head].step); return; } //cup1->cup2|cup1->cup3|先cup1->cup2后cup1->cup3 if(a>0) { //cup1->cup2只能倒满,或者倒不满 //不会出现倒不满的现象,只会倒不倒; x=a-(n-b); y=n; z=c; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } x=0; y=n; z=m; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } x=(a-(m-c)); y=b; z=m; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } } //cup2->cup1|cup2->cup3|\cup2->cup1; if(b>0) { x=a+b; y=0; z=c; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } if(b+c>=m) { x=a; y=b-(m-c); z=m; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } x=s-m; y=0; z=m; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } } else { x=a; y=0; z=b+c; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } } } //cup3->cup1|cup3->cup2\\cup3->cup1 if(c>0) { x=a+c; y=b; z=0; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } if(b+c>=n) { x=a; y=n; z=c-(n-b); if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } x=s-n; y=n; z=0; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } } else { x=a; y=b+c; z=0; if(!vis[x][y][z]) { vis[x][y][z]=1; q[tail].cup1=x; q[tail].cup2=y; q[tail].cup3=z; q[tail].step=q[head].step+1; tail++; } } } head++; } printf("NO\n");}int main(){ while(~scanf("%d%d%d",&s,&n,&m)) { if(s==0&&n==0&&m==0) break; if(n<m) { int temp=n; n=m; m=temp; } if(n+m<s||n+m>s||s%2==1) { puts("NO"); continue; } bfs(); } return 0;}
0 0
- hdoj1495简单BFS
- HDOJ1495 非常可乐(bfs)
- hdoj1495非常可乐《bfs》
- hdoj1495以及泊松分酒问题
- 简单bfs
- 简单bfs
- poj 3626 简单bfs
- poj 3126 简单bfs
- poj 3278 简单bfs
- 简单bfs 广度搜索
- POJ2243 简单BFS
- hdu1372-简单的BfS
- HDU 1242 简单bfs
- hdu2612简单BFS
- hdu1372 简单bfs
- hdu1175 暴力简单bfs
- 简单bfs-hdoj1253
- hdu 4444 简单bfs
- ubuntu14.04设置静态ip
- CityMaker学习教程05 模型导入
- Mac终端(Terminal)自定义颜色,字体,背景
- hibernate缓存:一级缓存和二级缓存
- 莫比乌斯反演—详解
- hdoj1495简单BFS
- STL标准入门汇总
- Spring之AOP(学习笔记)
- Android RadioButton与ListView的混合使用
- css实现三角形原理
- haproxy
- I/O多路复用之select/poll/epoll
- bash 命令执行环境
- 树状数组及其应用(2)