Implementieren Sie die Suche nach Tiefenpriorität (DFS) und die Suche nach Breitenpriorität (BFS) in Python

Was ich getan habe

AtCoder Typical Contest 001 A - Ich habe versucht, die Suche nach Tiefenpriorität in Python zu implementieren. Da dieses Problem sowohl durch die Tiefensuche (DFS) als auch durch die Breitensuche (BFS) gelöst werden kann, haben wir beide implementiert. Zusätzlich wurde die Suche nach Tiefenpriorität mit einem Muster unter Verwendung einer rekursiven Funktion und einem Muster unter Verwendung eines Stapels (LIFO) implementiert.

DFS

Fall mit rekursiver Funktion


#Eine rekursive Funktion für die Suche nach Tiefenpriorität
import sys
sys.setrecursionlimit(10**7) #Einschränkungen für rekursive Funktionsaufrufe

def dfs(v_x, v_y, seen_list, c_list):
    if v_x < 0 or v_y < 0 or v_x >= w or v_y >= h:
        return
    if seen_list[v_y][v_x]:
        return
    if c_list[v_y][v_x] == "#":
        return
    seen_list[v_y][v_x] = True
    dfs(v_x+1,v_y,seen_list,c_list)
    dfs(v_x-1,v_y,seen_list,c_list)
    dfs(v_x,v_y+1,seen_list,c_list)
    dfs(v_x,v_y-1,seen_list,c_list)
    
h, w = map(int, input().split())
seen_list = [[False] * w for i in range(h)]
c_list = []
s = []
g = []
for i in range(h):
    _tmp = list(input())
    if "s" in _tmp:
        s = [_tmp.index("s"),i]
    if "g" in _tmp:
        g = [_tmp.index("g"),i]
    c_list.append(_tmp)

dfs(s[0],s[1],seen_list,c_list)

if seen_list[g[1]][g[0]]:
    print("Yes")
else:
    print("No")

Fall mit Stapel

#Ein Suchstapel mit Tiefenpriorität(LIFO)
from collections import deque

def dfs(stack, seen_list, c_list):
    while len(stack)>0:
        v_x, v_y = stack.pop()
        if v_x < 0 or v_y < 0 or v_x >= w or v_y >= h:
            continue
        if seen_list[v_y][v_x]:
            continue
        if c_list[v_y][v_x] == "#":
            continue
        seen_list[v_y][v_x] = True
        stack.append([v_x+1,v_y])
        stack.append([v_x-1,v_y])
        stack.append([v_x,v_y+1])
        stack.append([v_x,v_y-1])
    
h, w = map(int, input().split())
seen_list = [[False] * w for i in range(h)]
c_list = []
s = []
g = []
stack = deque()

for i in range(h):
    _tmp = list(input())
    if "s" in _tmp:
        s = [_tmp.index("s"),i]
    if "g" in _tmp:
        g = [_tmp.index("g"),i]
    c_list.append(_tmp)

stack.append(s)
dfs(stack,seen_list,c_list)

if seen_list[g[1]][g[0]]:
    print("Yes")
else:
    print("No")

BFS

#Eine Warteschlange für die Suche nach Tiefenpriorität, die durch die Suche nach Breitenpriorität gelöst werden soll(FIFO)
from collections import deque

def bfs(que, seen_list, c_list):
    while len(que)>0:
        v_x, v_y = que.pop()
        if v_x < 0 or v_y < 0 or v_x >= w or v_y >= h:
            continue
        if seen_list[v_y][v_x]:
            continue
        if c_list[v_y][v_x] == "#":
            continue
        seen_list[v_y][v_x] = True
        que.appendleft([v_x+1,v_y])
        que.appendleft([v_x-1,v_y])
        que.appendleft([v_x,v_y+1])
        que.appendleft([v_x,v_y-1])
    
h, w = map(int, input().split())
seen_list = [[False] * w for i in range(h)]
c_list = []
s = []
g = []
que = deque()

for i in range(h):
    _tmp = list(input())
    if "s" in _tmp:
        s = [_tmp.index("s"),i]
    if "g" in _tmp:
        g = [_tmp.index("g"),i]
    c_list.append(_tmp)

que.append(s)
bfs(que,seen_list,c_list)

if seen_list[g[1]][g[0]]:
    print("Yes")
else:
    print("No")

Recommended Posts

Implementieren Sie die Suche nach Tiefenpriorität (DFS) und die Suche nach Breitenpriorität (BFS) in Python
[Python] Suche nach Tiefenpriorität und Suche nach Breitenpriorität
Algorithmus in Python (Tiefenprioritätssuche, dfs)
[Python] BFS (Suche nach Breitenpriorität) ABC168D
[Python] DFS (Tiefenprioritätssuche) ATC001A
[Python] DFS (Tiefenprioritätssuche) ABC157D
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Suche nach Tiefenpriorität mit Stack in Python
Implementieren Sie den FIR-Filter in Python und C.
Suchen und spielen Sie YouTube-Videos mit Python
Ich habe versucht, AtCoders Depth Priority Search (DFS) in Python zu lösen (Ergebnis: TLE ...)
Python-Übung 1-Breiten-Prioritätssuche
Dichotomie mit Python
Implementieren Sie XENO mit Python
Lineare Suche in Python
Implementieren Sie sum in Python
Binäre Suche in Python
Implementieren Sie Traceroute in Python 3
Ich habe versucht, die Suche nach Breitenpriorität mit Python zu implementieren (Warteschlange, selbst erstelltes Zeichnen).
Suche nach Breitenpriorität / bidirektionale Suche (Python Edition)
Implementieren Sie Naive Bayes in Python 3.3
Implementieren Sie alte Chiffren in Python
Binäre Suche in Python / C ++
Algorithmus in Python (Dichotomie)
Stapel und Warteschlange in Python
Implementieren Sie Redis Mutex in Python
Implementieren Sie die Erweiterung in Python
Implementieren Sie schnelles RPC in Python
Implementieren Sie den Dijkstra-Algorithmus in Python
Implementieren Sie den Slack Chat Bot in Python
Unittest und CI in Python
Anwendung zum Anzeigen und Durchsuchen lokaler Memos (Tagebuch) in Python
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Finden Sie den kritischen Pfad von PERT mithilfe der Breitenprioritätssuche und der Tiefenprioritätssuche
Schreiben Sie eine Dichotomie in Python
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Implementieren Sie die Funktion power.prop.test von R in Python
Suche nach Tiefenpriorität (nicht rekursiver Typ) und Bereinigungsmethode für die untere Grenze (Python Edition)
Unterschied zwischen list () und [] in Python
Zeigen Sie Fotos in Python und HTML an
Sortieralgorithmus und Implementierung in Python
Bearbeiten Sie Dateien und Ordner in Python
Über Python und Cython dtype
Implementieren Sie das Singleton-Muster in Python
Zuweisungen und Änderungen in Python-Objekten
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python
Implementieren Sie die REST-API schnell in Python
Reverse Flat Pseudonym und Katakana in Python2.7
[GUI in Python] PyQt5-Menü und Symbolleiste-
Erstellen und lesen Sie Messagepacks in Python
Python 2-Minuten-Suche und ihre Ableitungen