[程序设计实习]时光机
2014-08-12 17:53
176 查看
描述
哆啦A梦有一个神奇的道具:时光机。坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来。
有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿越操作。大雄他们需要从现在出发,到达一个目标时间点进行探险,结束后再返回到现在,他们希望尽可能减少时光机的操作次数,你能帮助他们吗?
假设大雄和他的伙伴们出发的时间点(现在)为S(0 < S < 1,000,000),希望到达的时间点(目标)为T(0 < T < 1,000,000),已知时光机可以进行如下的时空穿越操作(X为正整数):
可以从任意时刻X穿越到X+1或者X-1时刻
可以从任意时刻X穿越到X*2时刻
当X为偶数时,可以从X时刻穿越到X/2时刻
请问,大雄和他的伙伴们从S时刻出发,先到达T时刻,再回到S时刻最少需要多少次时空穿越操作?
输入
输入的第一个数是一个正整数N,表示测试数据一共有N组(0 < N <20)。 之后有N行,每一行包含两个正整数S和T,表示出发和到达时间点。
输出
输出包括N行,每一行一个正整数,表示每组测试数据对应的最少时光机操作次数。
思路:与迷宫问题差不多,同样选择BFS,代码如下:
哆啦A梦有一个神奇的道具:时光机。坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来。
有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿越操作。大雄他们需要从现在出发,到达一个目标时间点进行探险,结束后再返回到现在,他们希望尽可能减少时光机的操作次数,你能帮助他们吗?
假设大雄和他的伙伴们出发的时间点(现在)为S(0 < S < 1,000,000),希望到达的时间点(目标)为T(0 < T < 1,000,000),已知时光机可以进行如下的时空穿越操作(X为正整数):
可以从任意时刻X穿越到X+1或者X-1时刻
可以从任意时刻X穿越到X*2时刻
当X为偶数时,可以从X时刻穿越到X/2时刻
请问,大雄和他的伙伴们从S时刻出发,先到达T时刻,再回到S时刻最少需要多少次时空穿越操作?
输入
输入的第一个数是一个正整数N,表示测试数据一共有N组(0 < N <20)。 之后有N行,每一行包含两个正整数S和T,表示出发和到达时间点。
输出
输出包括N行,每一行一个正整数,表示每组测试数据对应的最少时光机操作次数。
思路:与迷宫问题差不多,同样选择BFS,代码如下:
#include <iostream> #include <string> #include <string.h> #include <queue> using namespace std; int visited[1000010]; struct Step{ int x; int steps; Step(int _x, int _s):x(_x),steps(_s){} }; queue<Step> q; int main(){ std::ios::sync_with_stdio(false); int n; cin >> n; while (n--) { int s, t; cin >> s >> t; memset(visited, 0, sizeof(visited)); q.push(Step(s, 0)); visited[s] = 1; while (!q.empty()) { Step s= q.front(); if(s.x == t) { cout << s.steps * 2 << endl; break; } else { if(s.x-1 >= 0 && !visited[s.x-1]) { q.push(Step(s.x-1, s.steps+1)); visited[s.x-1] = 1; } if(s.x+1 <= 1000000 && !visited[s.x+1]) { q.push(Step(s.x+1, s.steps+1)); visited[s.x+1] = 1; } if(s.x*2 <= 1000000 && !visited[s.x*2]) { q.push(Step(s.x*2, s.steps+1)); visited[s.x*2] = 1; } if(s.x%2 ==0 && !visited[s.x/2]) { q.push(Step(s.x/2, s.steps+1)); visited[s.x/ 2] = 1; } q.pop(); } } while (!q.empty()) q.pop(); } return 0; }
相关文章推荐
- 程序设计实习 魔兽世界终极版 注意及代码~
- 程序设计实习
- PKU C++程序设计实习 学习笔记2 继承与派生
- 2015 程序设计实习之递归+动规作业1
- 2015程序设计实习之第二次上机周六
- PKU C++程序设计实习 学习笔记5 文件操作和模板
- PKU-程序设计实习-MySort函数
- 【程序设计实习】笔记 6-005 间接基类
- 【程序设计实习】笔记 6-005 间接基类
- PKU C++程序设计实习 学习笔记6 标准模板库STL
- 北大程序设计实习MOOC 编程作业 《魔兽世界之二:装备》
- 程序设计实习MOOC/第十五周编程作业/A:棋盘问题
- 程序设计实习MOOC/第十三周编程作业/C:UNIMODAL PALINDROMIC DECOMPOSITIONS(Greater New York 2002)
- PKU C++程序设计实习 学习笔记1
- 【程序设计实习】笔记 6--001继承
- 【北大MOOC】2014程序设计实习--第二周编程作业
- 程序设计实习MOOC/第十三周编程作业/B:木材加工(NOIP 2004)
- [程序设计实习]大整数的四则运算
- 北大程序设计实习公开课编程作业,魔兽世界之二:装备
- 【程序设计实习】笔记 6--002复合关系