1. 程式人生 > 其它 >go_json.Unmarshal()方法處理二維輸入陣列_fmt.Scanf()方法換行輸入

go_json.Unmarshal()方法處理二維輸入陣列_fmt.Scanf()方法換行輸入

743. 網路延遲時間

有 n 個網路節點,標記為1到 n。

給你一個列表times,表示訊號經過 有向 邊的傳遞時間。times[i] = (ui, vi, wi),其中ui是源節點,vi是目標節點, wi是一個訊號從源節點傳遞到目標節點的時間。

現在,從某個節點K發出一個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到訊號,返回-1 。

示例 1:

輸入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
輸出:2


示例 2:

輸入:times = [[1,2,1]], n = 2, k = 1
輸出:1


示例 3:

輸入:times = [[1,2,1]], n = 2, k = 2
輸出:-1

提示:

1 <= k <= n <= 100
1 <= times.length <= 6000
times[i].length == 3
1 <= ui, vi <= n
ui != vi
0 <= wi <= 100
所有 (ui, vi) 對都 互不相同(即,不含重複邊)

743. 網路延遲時間 - 力扣(LeetCode) (leetcode-cn.com)

func networkDelayTime(times [][]int, n, k int) (ans int) {
    type edge struct{ to, time int }
    g :
= make([][]edge, n) for _, t := range times { x, y := t[0]-1, t[1]-1 g[x] = append(g[x], edge{y, t[2]}) } const inf int = math.MaxInt64 / 2 dist := make([]int, n) for i := range dist { dist[i] = inf } dist[k-1] = 0 h := &hp{{0, k - 1}} for
h.Len() > 0 { p := heap.Pop(h).(pair) x := p.x if dist[x] < p.d { continue } for _, e := range g[x] { y := e.to if d := dist[x] + e.time; d < dist[y] { dist[y] = d heap.Push(h, pair{d, y}) } } } for _, d := range dist { if d == inf { return -1 } ans = max(ans, d) } return } type pair struct{ d, x int } type hp []pair func (h hp) Len() int { return len(h) } func (h hp) Less(i, j int) bool { return h[i].d < h[j].d } func (h hp) Swap(i, j int) { h[i], h[j] = h[j], h[i] } func (h *hp) Push(v interface{}) { *h = append(*h, v.(pair)) } func (h *hp) Pop() (v interface{}) { a := *h; *h, v = a[:len(a)-1], a[len(a)-1]; return } func max(a, b int) int { if a > b { return a } return b } func main() { //reader := bufio.NewReader(os.Stdin) //for { // numStr, err := reader.ReadString('\n') // if err != nil { // break // } // //println("numStr: ", numStr) // // sList := strings.Split(numStr, "\n") // timesNum, _ := strconv.Atoi(sList[0]) // n, _ := strconv.Atoi(sList[1]) // k, _ := strconv.Atoi(sList[1]) // //println(n, k, reflect.TypeOf(n), reflect.TypeOf(k)) // println(timesNum, n, k) // // //var timesInput = make([][]int, 0) // //errJson := json.Unmarshal([]byte(numStr[0]), &timesInput) // //if errJson != nil { // // fmt.Println("errJson:", errJson) // // return // //} // //println("呼叫函式的結果(在陣列迴圈之前):", networkDelayTime(timesInput, n, k)) //} //numStr, err := reader.ReadString('\n') //if err != nil { // println("err:", err) // return //} //println("numStr: ", numStr) var strInput string var n, k int var timesTwo, err = fmt.Scanf("%s\n%d\n%d\n", &strInput, &n, &k) if err != nil { fmt.Println("error:", err) return } println("timesTwo: ", timesTwo) println(strInput, n, k) var timesInput = make([][]int, 0) errJson := json.Unmarshal([]byte(strInput), &timesInput) if errJson != nil { fmt.Println("errJson:", errJson) return } // [[2,1,1],[2,3,1],[3,4,1]] println("timesInput: ", timesInput) println(reflect.TypeOf(timesInput)) var i, j int /* 輸出陣列元素 */ for i = 0; i < 3; i++ { for j = 0; j < 3; j++ { fmt.Printf("timesInput[%d][%d] = %d\n", i,j, timesInput[i][j] ) } } println("呼叫函式的結果(在陣列迴圈之前):", networkDelayTime(timesInput, n, k)) }
View Code

1、換行輸入:

    var strInput string
    var n, k int
    var timesTwo, err = fmt.Scanf("%s\n%d\n%d\n", &strInput, &n, &k)
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    println("timesTwo: ", timesTwo)
    println(strInput, n, k)

2、json字串轉二維陣列:

    var timesInput = make([][]int, 0)
    errJson := json.Unmarshal([]byte(strInput), &timesInput)
    if errJson != nil {
        fmt.Println("errJson:", errJson)
        return
    }
    // [[2,1,1],[2,3,1],[3,4,1]]
    println("timesInput: ", timesInput)
    println(reflect.TypeOf(timesInput))

3、json字串轉一維陣列:

// json字串轉換為一維陣列 [2,-1,1,2,2]
//var numsJson []int  // 這個二維陣列用不了,比如[][]int!!
var numsJson = make([]int, 0)
errJson := json.Unmarshal([]byte(strInput), &numsJson)
if errJson != nil {
    fmt.Println("error:", errJson)
    return
}
println("numsJson: ", numsJson, reflect.TypeOf(numsJson))
var i int
for i=0; i<len(numsJson); i++ {
    println(numsJson[i])
}