博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3278 Catch That Cow
阅读量:6704 次
发布时间:2019-06-25

本文共 1780 字,大约阅读时间需要 5 分钟。

题目大意:农场主约翰得知了一头逃跑的母牛的行踪,想立即抓住她。他从一个点开始,N(0≤N≤100000)在数轴上,牛点K(0≤K≤100000)在同一数轴。农夫约翰有两种交通方式:步行和心灵运输。

*行走:FJ可以在一分钟内从任意点X移动到点X - 1或X + 1。

*传送:FJ可以在一分钟内从任何点X移动到点2。

如果奶牛不知道它的追求,根本不动,农夫约翰要多久才能取回它?

 

也就是说如果John所在位置大于等于母牛所在位置,那么只能倒退直接得到最优解。如果John所在位置小于母牛所在位置,那么每一个结点都有三个可选结点,分别是当前节点+1,-1,*2。

选取适当的剪枝函数,当当前结点越界时即<0或>100000时相应结点不进入队列,当找到一个可行解(最优解)时,即到达了母牛的位置,直接返回最优解step[k]。

 

算法思想:队列式分支限界法,以广度优先搜索三叉树,设置一个队列q来存储从John所在的位置开始入队,然后出队并开始拓展三个子结点(三个子节点入队)。设置一个数组step[i]来记录走到某位置的最少时间,并设置一个数组vis[i]来记录是否到过某位置,如果到过表示前面有更优解,便可以舍弃相应子节点(不入队列)。

PS: 如果不了解STL queue容器的用法,可以查一下。

1 #include
//使用queue 容器 2 #include
3 #include
4 #define N 100001 5 using namespace std; 6 int bfs(int n, int k) { 7 queue
q;//利用队列模拟求解 8 int step[N];//到某位置的走的最少时间 9 bool vis[N];10 memset(vis, false, sizeof(vis));11 memset(step, 0, sizeof step);12 int x, next;13 step[n] = 0;//初始化在n时为0步14 vis[n] = true;//标记访问过15 q.push(n);16 while (!q.empty()) {17 x = q.front();//当前位置18 q.pop();19 for (int i = 0; i < 3; i++) {
//模拟三种情况20 if (i == 0) next = x - 1;21 else if (i == 1) next = x + 1;22 else if (i == 2) next = x * 2;23 if (next<0 || next>N) continue;24 if (!vis[next]) {
//如果访问过 说明前面有更好的解25 vis[next] = true;26 q.push(next);27 step[next] = step[x] + 1;//到next位置时的最少时间28 }29 if (next == k) return step[next];//到k时的最少时间30 }31 }32 }33 int main() {34 int n, k;35 cin >> n >> k;36 if (n >= k) cout << n - k << endl;37 else cout << bfs(n, k) << endl;38 return 0;39 }

 

转载于:https://www.cnblogs.com/DA799422035/p/8955397.html

你可能感兴趣的文章
django cmdb增删改查
查看>>
1-2路由器基本配置命令
查看>>
怎么样才能写好网页的页面主题以及描述呢?
查看>>
在Win7“F8安全模式”下怎么修复系统故障?
查看>>
PHP中exec,system等函数调用系统命令详解
查看>>
DM***
查看>>
RHEL5中DHCP服务的搭建
查看>>
node连接mysql数据库
查看>>
第五次作业
查看>>
4. 释放内存
查看>>
httpd中站点资源访问控制的设置
查看>>
overload abs-重载绝对值函数
查看>>
认识HWIC-1CE1T1-PRI
查看>>
zabbix监控mysql
查看>>
Windows上配置Apache httpd运行python web应用
查看>>
Lua1.0 编译准备
查看>>
存储虚拟化方案的选择与设计完全指南
查看>>
基于Nagios网络监控平台的实现--具体事例
查看>>
mahout in action ----分类的原理
查看>>
数据库:mysql的使用
查看>>