如何检查矩阵的任意对角线上是否有多个1?

How to check if there are multiple 1s in any diagonal of matrix?

所以我有一个任务,我必须检查 8x8 矩阵的任何对角线上是否有多个 1。

例如,如果这是矩阵:

0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0 

输出应该是“否”,因为不存在包含多个 1 的对角线。

但是对于这个:

0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 1 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 1 0 1 0
0 0 1 0 0 0 0 0 

输出应该是“是”,因为它在一条对角线上有两个数字 1。我不太明白如何让它检查对角线。

要搜索矩阵中的所有对角线,您只需检查 for 循环中索引的差异即可。

假设 i 是一行中每个元素的索引,j 是元素每一列的索引

现在考虑一个 4x4 矩阵:

[0,0,0,1]
[0,0,1,0]
[0,1,0,0]
[1,0,0,0]

要访问此矩阵的每个对角线,您需要检查 i-j 的值是多少。

让我们为每个元素构建一个值为 i - j 的矩阵:

[ 0, 1, 2, 3]
[-1, 0, 1, 2]
[-2,-1, 0, 1]
[-3,-2,-1, 0]

现在很容易看出,我们迭代对角线所需要做的就是检查 i-j 值 -> 如果它是相同的值,则该元素属于同一对角线。

要检查其他对角线,只需计算 i + j :

[ 0, 1, 2, 3]
[ 1, 2, 3, 4]
[ 2, 3, 4, 5]
[ 3, 4, 5, 6]