算法1
考点:蛇形数组,曼哈顿距离
处理方法
数字从0开始,即每行从原来的1 2 3 4 5 6变成0 1 2 3 4 5,行号计算变成了数字M/w,
列号处理起来有点麻烦,如果是奇数行,由于是蛇形数组,就变成了倒着,所以在奇数行,w-1-y1,这里的y1是正常顺序下求的列号m%w
C++ 代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
int w,m,n;
scanf("%d%d%d",&w,&m,&n);
m--,n--;//这里处理数字从0开始,题目中是从1 2 3,为了方便计算是从0开始,所以变成0 1 2
int x1=m/w,x2=n/w;//处理行号
int y1=m%w,y2=n%w;//如果正常情况下,没有走蛇形的列号
if(x1%2)y1=w-1-y1;
if(x2%2)y2=w-1-y2;//如果是奇数行,,数字是反着的,因为列是从0列开始,所以认为的奇数的%2,然后用w-1-y1
cout<<abs(x1-x2)+abs(y1-y2)<<endl;
return 0;
}