文章
10
粉丝
40
获赞
2
访问
4.9k
我的思路是维护一个栈,保证这个栈在从开始到终点的过程中就没有回头路,这样就会得到一个唯一路径,再将这个唯一路径做一下简单合并(注意方向要映射正确哈:1→2,2→1,3→4,4→3 这样)。但这个题一开始是一个恶心的字符串读取,数据格式a-b,a和b是两个数字,当然新手做可以遍历,在这里我也是做了一番研究,用了sstream的函数,直接分割出来了,甚至不用考虑字符串形式的数字到int形式的映射。所以还是觉得这个sstream的sscanf(str, "%d-%d", & first, & second)还是挺牛杯的。
结合上面的介绍,所以我的步骤如下:
1. 读取位置更新的方向和步长(也就是1-2这样的数据,不过每读一个都要维护一个没有回头路的路由,那自然用一个栈来维护是比较好的,因为只需要对栈顶操作就行)
2. 根据1中得到的路由,依次取出栈顶元素,如果方向一致就合并步长。
下面放代码:
#include <iostream>
#include <stack>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <sstream>
using namespace std;
typedef pair<int, int> PII;
int change(int a)
{
if (a == 1) a = 2;
else if (a == 2) a = 1;
else if (a == 3) a = 4;
else if (a == 4) a = 3;
return a;
}
int main()
{
stack<PII> route;
string step;
while(cin >> step && step != "0-0")
{
int first, second;
...
登录后发布评论
连续输入相同方向会有问题,感觉是res.second在85-86行的问题