From 8d6ee5c09699332a72afd5c045f3e79801ca5f77 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Wed, 6 May 2020 16:15:46 +0200 Subject: [PATCH] DFS --- 10-dfs/dfs-strom.py | 27 +++++++++++++++++++++++++++ 10-dfs/dfs.py | 28 ++++++++++++++++++++++++++++ 10-dfs/graf.in | 13 +++++++++++++ 10-dfs/hloubka-stromu.py | 25 +++++++++++++++++++++++++ 10-dfs/strom.in | 10 ++++++++++ 5 files changed, 103 insertions(+) create mode 100755 10-dfs/dfs-strom.py create mode 100755 10-dfs/dfs.py create mode 100644 10-dfs/graf.in create mode 100755 10-dfs/hloubka-stromu.py create mode 100644 10-dfs/strom.in diff --git a/10-dfs/dfs-strom.py b/10-dfs/dfs-strom.py new file mode 100755 index 0000000..9225018 --- /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 0000000..e40d127 --- /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 0000000..a8da5c8 --- /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 0000000..254b1c7 --- /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 0000000..106db0f --- /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 -- GitLab