1

所以我正在对未知长度的图进行深度优先搜索。图本身将被编码为“2D”数组邻接表。

前任:

 Graph: .word 0, 1, 1, 1, 0
        .word 1, 0, 1, 1, 1
        .word 1, 1, 0, 1, 1
        .word 1, 1, 1, 0, 1
        .word 1, 1, 0, 0, 0

但是,这个图表可以是任意大小,当它被评分时,TA 可以在我的代码中放置任意大小的图表来测试。所以我不知道图表的大小。

当我想检查邻接表时,这会成为一个问题。我怎么知道我何时到达了行尾?如何前进到特定行?我知道如何按单词前进,但我不知道如何在不知道需要前进多少元素(因此字节)的情况下前进到下一行。

4

1 回答 1

1

如果您想在没有用户干预的情况下计算行大小,则需要在图形定义之后添加一个标记(在我的示例中,我使用 EndGraph 标签作为标记)。知道矩阵的第一个元素的地址和矩阵的结束位置允许您计算行大小,您只需要计算矩阵元素总数的平方根:

.data
 Graph: .word 0, 1, 1, 1, 0
        .word 1, 0, 1, 1, 1
        .word 1, 1, 0, 1, 1
        .word 1, 1, 1, 0, 1
        .word 1, 1, 0, 0, 0
EndGraph:
.text        
  la $t1, Graph
  la $t2, EndGraph
  sub $t2, $t2, $t1  # Get size of matrix
  srl $t2, $t2, 2    # Get the total number of items of the matrix
  move $t3, $zero
computeRowSize:
  mult $t3, $t3
  mflo $t4
  beq $t2, $t4, done
  addiu $t3, $t3, 1
  j computeRowSize
done:  
  sll $t3, $t3, 2    # compute the size of each row (number of row elements * size(element)
  # Here you have the RowSize in $t3
于 2013-03-15T13:28:10.480 回答