POJ 3414 dfs倒水问题
来源:互联网 发布:python class 转 json 编辑:程序博客网 时间:2024/06/12 01:23
题意:这个题目的话意思就是有几种倒水方式,看你怎么倒水可以倒出来有一个瓶子的水恰好是多少升,或者同时满足,输出最少的操作次数并且输出方式
这个题目看起来好像是一道模拟题,其实不然,这是一道dfs搜索题,只不过看起来好像无从下手,其实想想就好了,我们可以用一个vis数组来保存当前的状态如果之前某一次倒水出现过这种情况,我们就无需再次去遍历这种情况,只需要遍历其他情况就好了,还有一个重要的剪枝就是假如说我们已经找到某一种情况可以到达目标状态,那么深度再深的我们就无需再次去遍历,因为绝对不是最优解。
下面给出代码仅供参考:
#include<cstdio>#include<cstring>int a,b,c,t,vis[105][105];char s[205][15],s2[205][15],choice[][10]={"FILL(1)","FILL(2)","DROP(1)","DROP(2)","POUR(1,2)","POUR(2,1)"};void dfs(int n,int m,int deep){ int dn,dm,i,j; if(deep>=t) return; if(n==c||m==c){ t=deep; for(i=0;i<t;i++) strcpy(s2[i],s[i]); } strcpy(s[deep],choice[0]); if(!vis[a][m]){ vis[a][m]=1; dfs(a,m,deep+1); vis[a][m]=0; } strcpy(s[deep],choice[1]); if(!vis[n][b]){ vis[n][b]=1; dfs(n,b,deep+1); vis[n][b]=0; } strcpy(s[deep],choice[2]); if(!vis[0][m]){ vis[0][m]=1; dfs(0,m,deep+1); vis[0][m]=0; } strcpy(s[deep],choice[3]); if(!vis[n][0]){ vis[n][0]=1; dfs(n,0,deep+1); vis[n][0]=0; } strcpy(s[deep],choice[4]); if(b-m>=n){ dn=0; dm=m+n; } else { dn=n-(b-m); dm=b; } if(!vis[dn][dm]){ vis[dn][dm]=1; dfs(dn,dm,deep+1); vis[dn][dm]=0; } strcpy(s[deep],choice[5]); if(a-n>=m){ dm=0; dn=m+n; } else { dm=m-(a-n); dn=a; } if(!vis[dn][dm]){ vis[dn][dm]=1; dfs(dn,dm,deep+1); vis[dn][dm]=0; }}int main(void){ int i; while(scanf("%d %d %d",&a,&b,&c)!=EOF){ t=1000000000; memset(vis,0,sizeof(vis)); dfs(0,0,0); if(t==1000000000) printf("impossible\n"); else{ printf("%d\n",t); for(i=0;i<t;i++) printf("%s\n",s2[i]); } }}
0 0
- POJ 3414 dfs倒水问题
- poj 3414 倒水问题 bfs
- POJ 3414 Pots(BFS倒水问题)
- poj 3414 Pots [bfs - 倒水问题]
- POJ 3414 Pots【bfs模拟倒水问题】
- POJ 3414 Pots【bfs模拟倒水问题】
- POJ 1606 Jugs 倒水问题
- POJ-3414-两个杯子倒水问题(宽搜+回溯)
- POJ 3414 - Easy BFS - 六入口倒水问题
- POJ 3414 Pots(BFS 倒水)
- UVa 10603 - Fill,经典倒水问题+隐式图搜索+dfs
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 分布式进阶(十三)Docker Container间实现数据共享
- 开始使用AFNetworking
- php json 中文乱码
- 配置mysql自动备份
- [Erlang]VM启动参数研究
- POJ 3414 dfs倒水问题
- 转:一些不常见但是很重要的数据结构
- 学习SSH时的练习demo,实现分页和登录等简单功能
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3
- OC视频笔记4.8(异常处理)
- "Selenium for Android"的Robotium 一 概述
- Android向Web提交参数的4种方式总结
- 利用java mail发送邮件
- std::string详解