diff --git a/10-dfs/dfs-strom.py b/10-dfs/dfs-strom.py new file mode 100755 index 0000000000000000000000000000000000000000..92250189df1442c2b29b706f9a930c8db59feb6c --- /dev/null +++ b/10-dfs/dfs-strom.py @@ -0,0 +1,27 @@ +#!/usr/bin/python3 +# Prohledávání do hloubky ve stromu + +# Načteme vstup: počet vrcholů, počet hran, pak hrany +n = int(input()) +m = int(input()) +sousede = [[] for _ in range(n)] +for _ in range(m): + u, v = map(int, input().split()) + u -= 1 # Na vstupu vrcholy číslujeme od 1 do n + v -= 1 + sousede[u].append(v) + sousede[v].append(u) + +# Rekurzivní funkce pro prohledávání, předáváme si rodiče, +# abychom do něj nešli znovu. +def dfs(v, rodic=None): + # print('Enter:', v+1) + + for s in sousede[v]: + if s != rodic: + dfs(s, v) + + # print('Exit:', v+1) + + +dfs(0) diff --git a/10-dfs/dfs.py b/10-dfs/dfs.py new file mode 100755 index 0000000000000000000000000000000000000000..e40d127ac9c287b793f9a858edfcae3f532e5708 --- /dev/null +++ b/10-dfs/dfs.py @@ -0,0 +1,28 @@ +#!/usr/bin/python3 +# Prohledávání do hloubky v obecném grafu. + +# Načteme vstup: počet vrcholů, počet hran, pak hrany +n = int(input()) +m = int(input()) +sousede = [[] for _ in range(n)] +for _ in range(m): + u, v = map(int, input().split()) + u -= 1 + v -= 1 + sousede[u].append(v) + sousede[v].append(u) + +# Značíme si, kde už jsme byli +znacka = [False]*n + +def dfs(v): + # print('Enter', v+1) + znacka[v] = True + + for s in sousede[v]: + if not znacka[s]: + dfs(s) + + # print('Exit', v+1) + +dfs(0) diff --git a/10-dfs/graf.in b/10-dfs/graf.in new file mode 100644 index 0000000000000000000000000000000000000000..a8da5c8fbd843280548658c55c8a070a529e29db --- /dev/null +++ b/10-dfs/graf.in @@ -0,0 +1,13 @@ +9 +11 +1 2 +1 3 +1 4 +3 5 +3 6 +4 7 +6 8 +8 9 +2 9 +7 9 +6 7 diff --git a/10-dfs/hloubka-stromu.py b/10-dfs/hloubka-stromu.py new file mode 100755 index 0000000000000000000000000000000000000000..254b1c7f6f81a6d6de6fed5d54fc4df6bbe447c6 --- /dev/null +++ b/10-dfs/hloubka-stromu.py @@ -0,0 +1,25 @@ +#!/usr/bin/python3 +# Aplikace DFS na výpočet hloubky stromu. + +# Načteme vstup: počet vrcholů, počet hran, pak hrany +n = int(input()) +m = int(input()) +sousede = [[] for _ in range(n)] +for _ in range(m): + u, v = map(int, input().split()) + u -= 1 + v -= 1 + sousede[u].append(v) + sousede[v].append(u) + +# Rekurzivní funkce, která spočítá hloubku podstromu +# pod daným vrcholem. +def hloubka(v, rodic=None): + h = 0 + for s in sousede[v]: + if s != rodic: + h = max(h, hloubka(s, v) + 1) + + return h + +print(hloubka(0)) diff --git a/10-dfs/strom.in b/10-dfs/strom.in new file mode 100644 index 0000000000000000000000000000000000000000..106db0f244f2bd03cac7561001584e988cc00c5c --- /dev/null +++ b/10-dfs/strom.in @@ -0,0 +1,10 @@ +9 +8 +1 2 +1 3 +1 4 +3 5 +3 6 +4 7 +6 8 +8 9