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

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

今回の問題は以下です。

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

実装

これも一瞬よくわからなかったので、AIと少し壁打ちしました。

これまでは双方に関係性があることが前提でしたが、これが片方のみになるということですね。

例として、以下のような方向の場合

  • 1 → 2
  • 1 → 3
  • 4 → 2
  • 4 → 5
  • 5 → 3

以下のような表になります。

実装としては以下のようになります。

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 // 前回からここの部分が変わっただけ
    }
    for i := 0; i < n; i++ {
        for j := 0; j < n; j++ {
            fmt.Printf("%d", g[i][j])
        }
        fmt.Println()
    }
    for i := 0; i < n; i++ {
        for j := 0; j < n; j++ {
            if g[i][j] == 1 {
                fmt.Printf("%d", j)
            }
        }
        fmt.Println()
    }
}

前回から変わった部分はコメントの部分だけです。

今回はこれで👍