给定一些矩阵,我想创建一行中所有1的链表,然后检查是否有任何行中的任何指针(如果它们留在i
列),它们指向到同一新列。例如,考虑以下图片:
所有离开列C3的指针都指向同一位置。离开C1列的所有指针都指向同一位置,也指向C2列,等等。但是离开C5的指针并不指向同一列。
我可以通过仅遍历每一行然后保存1的索引来创建链接列表。但是,我不确定如何创建一种有效的方法来检查离开特定列的箭头是否都指向同一位置。我可以遍历所有组合,但是这样效率低下。我将如何进行?
出于测试目的,这是图片中的矩阵:
matrix = [[1,1,0,0,0][0,0,1,0,0][1,1,0,1,0][0,0,1,0,1][0,0,1,1,0]]
输入:矩阵 输出:“错误,此矩阵不满足要求” 输出说明:C5指向C1和C3。仅当一列中的所有1都指向左侧的EXACT相同列时,矩阵才满足要求。因此,例如,如果(E,C1)= 1且(E,C3)= 0,则此矩阵将满足要求。
答案 0 :(得分:1)
制作集合列表,列表索引对应于该列,集合包含已寻址列的索引。
扫描行时,添加要设置的链接列索引。最后检查设置的长度。
您的情况的示例(为了避免错误,我使用列名而不是索引):
sets[C1] = {C2}
sets[C5] = {C1,C3}
快速制作的代码:
matrix = [[1,1,0,0,0],[0,0,1,0,0],[1,1,0,1,0],[0,0,1,0,1],[0,0,1,1,0]]
sets = []
for col in range(len(matrix[0])):
sets.append(set())
for row in range(len(matrix)):
leftone = -1
for col in range(len(matrix[row])):
if matrix[row][col] == 1:
if leftone < 0:
sets[col].add(col)
else:
sets[col].add(leftone)
leftone = col
for col in range(len(matrix[0])):
print(sets[col], len(sets[col]) == 1)
>>>
{0} True
{0} True
{2} True
{1, 2} False
{2} True