在电影里我们常常可以看到这样的镜头,通过在犯罪分子身上安装的信号发射装置,警方可以持续不断的知道犯罪分子的位置。现在请你根据下面这个地图来追踪罪犯(地图中字母固定、字母位置固定、地图四周是墙):
图中每个字符代表一个位置,现在你不断地接收到一些位置信号,那么请你编写程序计算从信号开始到信号结束目标至少移动了多少距离,在本地图中,只能上下左右四个方向移动,相邻两个单元格的移动距离为1。例如接受信号如:BJOI,那么移动顺序为B-J-O-I,最少移动距离7。
在电影里我们常常可以看到这样的镜头,通过在犯罪分子身上安装的信号发射装置,警方可以持续不断的知道犯罪分子的位置。现在请你根据下面这个地图来追踪罪犯(地图中字母固定、字母位置固定、地图四周是墙):
图中每个字符代表一个位置,现在你不断地接收到一些位置信号,那么请你编写程序计算从信号开始到信号结束目标至少移动了多少距离,在本地图中,只能上下左右四个方向移动,相邻两个单元格的移动距离为1。例如接受信号如:BJOI,那么移动顺序为B-J-O-I,最少移动距离7。
#include <iostream>
using namespace std;
int calc(char ch1, char ch2)
{
int n = 0;
int x1 = (ch1 - 'A') % 4;
int x2 = (ch2 - 'A') % 4;
int y1 = (ch1 - 'A') / 4;
int y2 = (ch2 - 'A') / 4;
if (x1 > x2) n += x1 - x2; else n += x2 - x1;
if (y1 > y2) n += y1 - y2; else n += y2 - y1;
return n;
}
int main()
{
char route[20];
cin >> route;
int sum = 0;
for (int i = 1; route[i] != 0; i++)
sum += calc(route[i], route[i - 1]);
cout << sum << endl;
return 0;
}