这段代码的功能是:找到一个 5x5 矩阵中数字 1 的位置,然后计算将它移动到矩阵中心 (2,2) 所需的最少步数。
-
矩阵定义和输入
int a[5][5]; // 创建5x5矩阵 int x, y; // 记录数字1的坐标 for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { cin >> a[j][i]; // 注意:列在前,行在后 if(a[j][i] == 1) { x = j; // 记录1所在的列 y = i; // 记录1所在的行 } } }
-
坐标系统 矩阵索引从 (0,0) 到 (4,4)
中心位置是 (2,2)
输入时是 a[j][i] 而不是 a[i][j],所以:
j 是列坐标(x坐标)
i 是行坐标(y坐标)
-
计算步数
cout << abs(x - 2) + abs(y - 2); // 曼哈顿距离
abs(x - 2):1所在列到中心列的步数
abs(y - 2):1所在行到中心行的步数
总和:从当前位置到中心的最少步数
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int a[5][5];
int x, y;
int j, i;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
cin >> a[j][i];
if(a[j][i] == 1)
{
x = j;//知道1的坐标
y = i;
}
}
}
cout << abs(x - 2) + abs(y - 2);//绝对值
}