【发布时间】:2020-01-10 12:12:54
【问题描述】:
如何遍历矩阵中的所有对角线?有类似的问题,比如this 一个,但他们只是计算总和。我需要通过所有对角线执行某些操作,而不仅仅是求和。为了清楚起见,我需要像图片中那样遍历它:
我想出了这个解决方案,但是很糟糕:
for(int j = 0; j < m; j++) {
for(int i = 0; i < n && i + j < m; i++) {
cout << matrix[i][i + j] << " ";
}
cout << endl;
}
for(int i = 1; i < n; i++) {
for(int j = 0; j < m && i + j < n; j++) {
cout << matrix[j + i][j] << " ";
}
cout << endl;
}
对于矩阵 n*m,我首先从主对角线向右遍历每个对角线,然后从主对角线向左遍历,但这个解决方案对我来说似乎很难看。
【问题讨论】:
-
您需要第一个循环来迭代地找到每个对角线的起点,然后需要一个内部循环来跟随每个对角线。你在哪里被屏蔽了?
-
@Damien 将其压缩到只有一个带有内循环的循环。我想出了一个解决方案,它需要两个循环,都带有内部循环,但它看起来很糟糕。我将其添加到问题中
-
请注意,对于两个循环,
while循环似乎比for循环更容易控制 -
你的内部循环并没有真正穿过对角线。为此,您必须同时增加
i和j。 -
你必须从主对角线开始吗?如果没有,你可以很容易地只获得一个内循环