こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
隣接行列 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】
実装
隣接行列というものがなんなのか、いまいち理解できなかったのでAIと壁打ちしました。
結果として得られた回答を要約すると以下の通りです。
「隣接行列」はただのチェック表
「頂点iと頂点jがつながっているか?」を、表の i行目 とj列目 が交差する場所に書き込みます。
- つながっている! → 1 を書く
- つながっていない… → 0 を書く
5つの頂点がある図(1枚目の五角形のような図)で表を作ってみましょう。
つながっているペア(辺)の一覧:
- 1と2
- 1と3
- 2と4
- 3と5
- 4と5
これをもとに、5×5の表を埋めるとこうなります。
…ということで、なんとなくイメージがつかめてきました。
実装してみます。
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++ {
fmt.Printf("%d", g[i][j])
}
fmt.Println()
}
}
これで実装できました。
一瞬戸惑いましたが、理解すればとても楽に実装できたので良かったです。
ではこれで👍