BFS——《算法笔记》8.2小节 问题 A: Jugs
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了BFS——《算法笔记》8.2小节 问题 A: Jugs,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1777字,纯文字阅读大概需要3分钟。
内容图文
![BFS——《算法笔记》8.2小节 问题 A: Jugs](/upload/InfoBanner/zyjiaocheng/834/a6b57ba2b58448068312c2bd9940ffc6.jpg)
首先,我的代码过了样例,但OJ上并没有过(只过了50%),并且神奇的是该题提交记录里没一个人过的(不知道是不是题目的问题)
下面是我的代码,用BFS解决,找出最优路径:
#include<iostream>
#include<queue>
#include<string>
#include<string.h>
using namespace std;
struct node
{
int a, b;
int ope;
};
string op[6] = {"fill A","fill B","empty A","empty B","pour A B","pour B A"};
int v_a, v_b, goal;
int vis[1050][1050] = { 0 };
node pre[1050][1050] = { 0 };
bool do_op(node &t, string s)
{
if (t.a<v_a&&s == "fill A")
{
t.a = v_a;
return true;
}
if (t.b<v_b&&s == "fill B")
{
t.b = v_b;
return true;
}
if (t.a>0&&s == "empty A")
{
t.a = 0;
return true;
}
if (t.b>0 && s == "empty B")
{
t.b = 0;
return true;
}
if (t.a>0&&t.b<v_b&&s == "pour A B")
{
if (t.a + t.b > v_b)
{
t.a -= v_b - t.b;
t.b = v_b;
}
else
{
t.b += t.a;
t.a = 0;
}
return true;
}
if (t.b > 0 && t.a < v_a&&s == "pour B A")
{
if (t.a + t.b > v_a)
{
t.b -= v_a - t.a;
t.a = v_a;
}
else
{
t.a +=t.b ;
t.b = 0;
}
return true;
}
return false;
}
int main()
{
while (cin >> v_a >> v_b >> goal)
{
queue <node> Q;
node start,end;
memset(vis, 0, sizeof(vis));
start.a = start.b = 0;
vis[0][0] = 1;
Q.push(start);
int flag = 0;
while (!Q.empty())
{
node vn = Q.front();
Q.pop();
for (int i = 0; i < 6; i++)
{
node temp = vn;
if (do_op(temp, op[i])&&vis[temp.a][temp.b]==0)
{
temp.ope = i;
vis[temp.a][temp.b] = 1;
pre[temp.a][temp.b].a = vn.a;
pre[temp.a][temp.b].b = vn.b;
pre[temp.a][temp.b].ope = vn.ope;
if (temp.b == goal)
{
end = temp;
flag = 1;
break;
}
else
{
Q.push(temp);
}
}
}
if (flag)break;
}
node ans[10050],temp=end;
int cnt = 0;
while (temp.a||temp.b)
{
ans[cnt++] = temp;
node t = temp;
t.a = pre[temp.a][temp.b].a;
t.b = pre[temp.a][temp.b].b;
t.ope = pre[temp.a][temp.b].ope;
temp = t;
}
for (int i = cnt - 1; i >= 0; i--)
{
cout << op[ans[i].ope] << endl;
}
cout << "success\n";
}
return 0;
}
如果有同志AC了的 欢迎评论探讨
内容总结
以上是互联网集市为您收集整理的BFS——《算法笔记》8.2小节 问题 A: Jugs全部内容,希望文章能够帮你解决BFS——《算法笔记》8.2小节 问题 A: Jugs所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。