水杯问题(就是一个简单的广搜)
来源:互联网 发布:网站源码建站 编辑:程序博客网 时间:2024/04/29 02:23
题目链接:点击打开链接
代码:
#include<stdio.h>#include<queue>#include<algorithm>using namespace std;#include<string.h>struct node{ int v[3],step;} ini,temp;int a[3],ed[3],vis[1010][1010];void bfs(){ queue<node>q; memset(vis,0,sizeof(vis)); ini.v[0]=a[0]; ini.step=ini.v[1]=ini.v[2]=0; q.push(ini); vis[a[0]][0]=1;
这个一定不能忘记,标记出现过的状态!!!! while(!q.empty()) { int i,j; ini=q.front(); q.pop(); for(i=0; i<3&&ini.v[i]>=0; i++) {
个人觉得,这里判不判断都无所谓! for(j=0; j<3; j++) if(i!=j) { temp=ini; if(ini.v[0]==ed[0]&&ini.v[1]==ed[1]) { printf("%d\n",ini.step); return ; 结束函数; } if(ini.v[i]+ini.v[j]<=a[j]) { temp.v[i]=0; temp.v[j]=ini.v[j]+ini.v[i]; } else { temp.v[i]=ini.v[i]+ini.v[j]-a[j]; temp.v[j]=a[j]; } if(!vis[temp.v[0]][temp.v[1]]) { temp.step=ini.step+1; if(temp.v[0]==ed[0]&&temp.v[1]==ed[1]) { printf("%d\n",temp.step); return ; } vis[temp.v[0]][temp.v[1]]=1; q.push(temp); } } } } printf("-1\n");}int main(){ int t; scanf("%d",&t); while(t--) { for(int i=0; i<3; i++) scanf("%d",&a[i]); for(int i=0; i<3; i++) scanf("%d",&ed[i]); bfs(); } return 0;}每次只可以倒一次水,枚举所有的倒水的状态,直接广搜(so easy,大二了啊,再不so easy 有点说不过去了啊)
0 0
- 水杯问题(就是一个简单的广搜)
- 三个水杯(广搜)
- nyoj21(三个水杯)(一般的广搜)
- nyoj 21 三个水杯(广搜)
- 广搜-nyoj-隐式图的搜索-三个水杯
- NYOJ 21 三个水杯(bfs,广搜)
- NYoj 21 三个水杯 广搜
- 三个水杯_ny_21(广搜).java
- 【三个水杯 NYOJ 21 广搜】
- 队列,广搜 nyoj 21 三个水杯
- 广搜——三个水杯
- nyoj 21 三个水杯 广搜
- 非常可乐 (广搜(简单倒水问题))
- NYOJ—三个水杯【搜索|广搜|BFS】
- POJ1426(简单广搜)
- Dice (简单广搜)
- 2017-10-02(一个水杯引发的思考)
- 连续区域的最大边长(简单广搜)
- JAVA之Lambda表达式
- pe重装系统后F盘无法打开系统拒绝访问解决方案
- 浅谈 akka actor
- std::mutex 和 std::lock_guard 小例子
- mysql rpm安装
- 水杯问题(就是一个简单的广搜)
- leetcode-377. Combination Sum IV
- 使用xml配置Mybatis
- autopep8规范你的python代码
- java网络编程之I/O模型(一)
- mathematica判断欧拉图
- 326. Power of Three / 342. Power of Four
- C++ Primer(第五版)练习6.36 6.37
- java jni 动态编译指令