P8623 [蓝桥杯 2015 省 B] 移动距离
题目描述
思路
最短移动距离,画个图,就是曼哈顿距离啊!x绝对值之差+y绝对值之差
代码
求m,n的坐标
可以构建矩阵,然后求等于m,n情况下的横纵坐标,复杂度O(
n
2
n^2
n2)
因为构建的这个矩阵是有规律的,可以直接求坐标,不用构建矩阵
第一种方法很好实现,我就不写了
#include <bits/stdc++.h>
using namespace std;
int main() {
int w, m, n;
cin >> w >> m >> n;
// 从 1-based 转为 0-based
m--, n--; //这一步是关键!!
// 求 m 对应的行列
int row1 = m / w;
int col1 = (row1 % 2 == 0) ? (m % w) : (w - 1 - (m % w));
// 求 n 对应的行列
int row2 = n / w;
int col2 = (row2 % 2 == 0) ? (n % w) : (w - 1 - (n % w));
// 曼哈顿距离
cout << abs(row1 - row2) + abs(col1 - col2) << endl;
return 0;
}
总结
曼哈顿距离,蛇形矩阵求横纵坐标