曼哈顿距离思路求解
把平方矩阵的每一个元素看做是一个点,坐标为(i, j)
x 1 2 3 4
y - - - - -
1 | 1 1 1 1
2 | 1 2 2 1
3 | 1 2 2 1
4 | 1 1 1 1
平方矩阵的边长为 n
,通过坐标和边长就可以求出各点到 上下左右 四条边的距离为:
up:i
down:n - i + 1
left:j
right:n - j + 1
再观察平方矩阵,发现每个元素的值其实是 上下左右 四个距离中最小的一个,于是只要用 min
库函数对其进行求解最小值即可。
另外本题是多组输入,输入 0
截止,那么便可以用 while(cin >> n, n)
来进行使用,前面输入,后面截止。
上代码:
#include <iostream>
using namespace std;
int main()
{
int n;
// 逗号表达式,前面输入,后面判断输入是否为 0
while (cin >> n, n)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
int up = i, down = n - i + 1, left = j, right = n - j + 1;
cout << min(min(up, down), min(left, right)) << " ";
}
cout << endl;
}
cout << endl;
}
return 0;
}
终于看懂这道题了,感谢感谢🙏