由此二位数组可以看出m与n之间的最短距离为他们二位数组内的两个索引分别做差的绝对值相加
如m为(i1,j1) n为(i2,j2)
则最短距离为|i1-i2|+|j1-j2|
目前主要的问题是如何把他写成二位数组 关键题目要求基数行正序偶数行倒叙
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int w=sc.nextInt();
int m=sc.nextInt();
int n=sc.nextInt();//键盘录入w(宽度),m(一栋楼),n(另一栋)
int max=m;
if (m < n) {
max=n;//判断m与n的最大楼号赋值给max
}
int arr[][]=new int[max/w+1][w];//二位数组初始化max/w+1为其行数w为宽度就是列数
//因为max/w为最少需要的行数但是可能有余数有余数就要+1行
//不如直接加一不去判断是否有余数
int age=1;//用来给房子排号
int a1=0;
int b1=0;
int a2=0;
int b2=0;//m和n的索引
for (int i = 0; i < max/w+1; i++) {//二维数组初始化 i是行数
if (a1!=0&&a2!=0&&b1!=0&&b2!=0)break;//如果此时的m与n的索引都找到
//就可以提前结束
for (int j = 0; j < w; j++) {//j为列数
if (i%2==0) {//if判断基偶
arr[i][j]=age++;
}
else {
arr[i][w-j-1]=age++;
}
}
for (int j = 0; j < w; j++) {//用来从数组里找到m n的索引
if (arr[i][j]==m) {
a1=i;
b1=j;
}
if (arr[i][j]==n) {
a2=i;
b2=j;
}
}
}
int juli=Math.abs(a1-a2)+Math.abs(b1-b2);//用来判断距离Math.abs为绝对值
System.out.println(juli);
}
}