C - Tour
答え(python)(動作確認用のprint有り):kobashun5848.icon
・解説コードの途中にprint文入れて、何してるか分かりやすいようにしたもの
・解説コードの動作が分からない人はこのコード実行したらわかりやすいかも
code:python
import sys
# pythonの最大再帰数の初期設定値1000になっている。設定を変更しない場合、大きい入力値でエラーになってしまう。
sys.setrecursionlimit(10000)
# 入力の読み込み
N,M=map(int,input().split())
G=[[] for i in range(N)]
# Gi は都市iから道路で直接繋がっている都市のリスト for i in range(M):
A,B=map(int,input().split())
print("G:",G)
# dfs
def dfs(v):
print("同じ頂点を2度以上調べないためにreturn")
return # 同じ頂点を2度以上調べないためのreturn
print("temp",v,"をTrueに変換") print(temp)
for vv in Gv: # ここが深さ優先探索になる由縁 dfs(vv)
ans=0
# 都市iからスタートする場合
for i in range(N):
print("-------",i+1,"番目の都市からいける都市を計算------------------------")
dfs(i)
ans += sum(temp)
print("ans:",ans)
print(ans)
swiftも書いたよ 👏🏼
code:swift
func readtaple() -> (A:Int, B:Int){
let ints = readLine()!.split(separator: " ").map{Int($0)!}
return (A:ints0, B:ints1) }
//NとMの読み込み
let n = readLine()!.split(separator: " ").map{Int($0)!}
if M != 0{ //M=0の時はエラーが出るのでその対処
//道の読み込みとリストの作成
//空のリスト作成
var G = Int()
for _ in 1...N{
G.append([])
}
//入力に対して処理
for _ in 1...M{
let tpl = readtaple()
}
//dfsの実装
func dfs(v:Int){
dfs(v: vv)
}
}
var ans:Int = 0
//都市iからスタートする場合
for i in 0...N-1{
temp = []
for _ in 0...N-1{
temp.append(false)
}
dfs(v: i)
ans = ans + temp.filter{ $0 == true}.count
}
print(ans)
}else{
print(N)
}