我正在尝试分析稀疏矩阵。面临按原始矩阵中元素的升序对行进行排序的任务。


但我不明白如何在不损坏空元素的情况下做到这一点。


我试图将 sum 数组的元素绑定到行并以某种方式移动它们。但一些元素已从 CSC 结构中删除。


可能需要自己更改 li/lj 数组,但我对此没有足够的数学知识。更准确地说,我不明白如何跟踪何时应该重新排列元素,除非在结构中明确指定了额外的元素(零)。


package main


import (

    "fmt"

)


type CSC struct {

    a, lj, li []int

}


func getEl(i, j int, el *CSC) int {

    for k := el.lj[j]; k < el.lj[j+1]; k++ {

        if el.li[k] == i {

            return el.a[k]

        }

    }

    return 0

}


func maxSliceEl(lj []int) int {

    max := 0


    for _, v := range lj {

        if v > max {

            max = v

        }

    }

    return max

}


func main() {

    ma := CSC{

        a:  []int{8, 2, 5, 7, 1, 9, 2},

        li: []int{0, 0, 1, 4, 4, 6, 4},

        lj: []int{0, 1, 1, 4, 6, 7},

    }


    n := len(ma.lj) + 1

    m := maxSliceEl(ma.li) - 1

    fmt.Printf("Col: %v, Row: %v\n", n, m)


    maxStr := []int{}


    fmt.Println("Initial matrix:")

    for i := 0; i < n; i++ {


        sumStrEl := 0

        for j := 0; j < m; j++ {

            fmt.Print(getEl(i, j, &ma), " ")

            sumStrEl += getEl(i, j, &ma)

        }


        maxStr = append(maxStr, sumStrEl)

        fmt.Println("|sumStrEl: ", sumStrEl)

    }


}