こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

隣接リスト | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

問題文を読んでも、何を出力すればよいのかいまいちよく分かりませんでした。

そこでこれもAIと壁打ちしました。

問題の例の図の場合は以下のように出力すればよいです。

図1(五角形のような形)を「隣接リスト」にすると、こんな感じのメモ帳セットになります。 ※コンピュータの世界なので、番号を「-1」して 0番から数えるルールで書きますね。

  • 0番(頂点1)のリスト: [1, 2] (2番と3番とつながっている)
  • 1番(頂点2)のリスト: [0, 3] (1番と4番とつながっている)
  • 2番(頂点3)のリスト: [0, 4] (1番と5番とつながっている)
  • 3番(頂点4)のリスト: [1, 4] (2番と5番とつながっている)
  • 4番(頂点5)のリスト: [2, 3] (3番と4番とつながっている)

ということで以下のように実装しました。

前回とあまり変わらないですね。

package main
import "fmt"
func main(){
    var n, m int
    fmt.Scan(&n, &m)
    g := make([][]int, n)
    for i := 0; i < n; i++ {
        g[i] = make([]int, n)
    }
    for i := 0; i < m; i++ {
        var a, b int
        fmt.Scan(&a, &b)
        g[a - 1][b - 1] = 1
        g[b - 1][a - 1] = 1
    }
    for i := 0; i < n; i++ {
        for j := 0; j < n; j++ {
            if g[i][j] == 1 {
                fmt.Printf("%d", j)
            }
        }
        fmt.Println()
    }
}

ということで実装できました。

今回はこれで👍