🚀

グリットから有向グラフを作成する

に公開

H行W列のマス目があります。#には障害物が置かれており、.には何も置いてありません。有向グラフを作ってください。

入力形式

H W
S1
S2
.
.
.
SN

入力例

2 4
.#..
....

実装

function main()
    h, w = readline() |> split |> x -> parse.(Int, x)
    s = [split(readline(), "") for _ ∈ 1:h]

    g = [[] for _ ∈ 1:h*w]

    for y ∈ 1:h, x ∈ 1:w
        if s[y][x] == "."
            for (a, b)[[1, 0], [-1, 0], [0, -1], [0, 1]]
                adjacent_x = x+a
                adjacent_y = y+b

                if 1  adjacent_x  w && 1  adjacent_y  h && s[adjacent_y][adjacent_x] == "."
                    push!(g[(y-1)*w + x], (adjacent_y-1)*w + adjacent_x)
                end
            end
        end
    end

    @show g
end

main()

出力

yuu@penguin:~/src/eikou/0429$ julia grid.jl 
2 4
.#..
....
g = Vector{Any}[[5], [], [4, 7], [3, 8], [6, 1], [7, 5], [8, 6, 3], [7, 4]]

Discussion