Implémenter la recherche de priorité en profondeur (DFS) et la recherche de priorité de largeur (BFS) en python

Ce que j'ai fait

AtCoder Typical Contest 001 A - J'ai essayé d'implémenter la recherche de priorité de profondeur en python. Étant donné que ce problème peut être résolu à la fois par Depth First Search (DFS) et Breadth First Search (BFS), nous avons implémenté les deux. De plus, la recherche de priorité de profondeur a été implémentée avec un modèle utilisant une fonction récursive et un modèle utilisant une pile (LIFO).

DFS

Cas utilisant la fonction récursive


#Une fonction récursive de recherche de priorité de profondeur
import sys
sys.setrecursionlimit(10**7) #Restrictions d'appel de fonction récursives

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")

Cas utilisant la pile

#Une pile de recherche prioritaire en profondeur(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

#Une file d'attente de recherche de priorité de profondeur à résoudre par la recherche de priorité de largeur(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

Implémenter la recherche de priorité en profondeur (DFS) et la recherche de priorité de largeur (BFS) en python
[Python] Recherche de priorité de profondeur et recherche de priorité de largeur
Algorithme en Python (recherche de priorité en profondeur, dfs)
[Python] BFS (recherche de priorité de largeur) ABC168D
[Python] DFS (recherche de priorité en profondeur) ATC001A
[Python] DFS (recherche de priorité en profondeur) ABC157D
Écrire une recherche de priorité en profondeur en Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Implémenter le filtre FIR en langage Python et C
Rechercher et lire des vidéos YouTube avec Python
J'ai essayé de résoudre la recherche de priorité de profondeur (DFS) d'AtCoder en Python (résultat: TLE ...)
Exercice Python Recherche prioritaire sur 1 largeur
Dichotomie avec Python
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Recherche linéaire en Python
Implémenter sum en Python
Recherche binaire en Python
Implémenter Traceroute dans Python 3
J'ai essayé d'implémenter la recherche de priorité de largeur avec python (file d'attente, dessin personnalisé)
Recherche de priorité de largeur / recherche bidirectionnelle (édition Python)
Implémenter Naive Bayes dans Python 3.3
Implémenter d'anciens chiffrements en python
Recherche binaire en Python / C ++
Algorithme en Python (dichotomie)
Pile et file d'attente en Python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Unittest et CI en Python
Application pour afficher et rechercher des mémos locaux (agenda) en Python
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Trouvez le chemin critique de PERT en utilisant la recherche de priorité de largeur et la recherche de priorité de profondeur
Ecrire une dichotomie en Python
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Implémenter la fonction power.prop.test de R en python
Recherche de priorité de profondeur (type non récursif) et méthode d'élagage de limite inférieure (édition Python)
Différence entre list () et [] en Python
Afficher les photos en Python et html
Algorithme de tri et implémentation en Python
Manipuler des fichiers et des dossiers en Python
À propos de Python et Cython dtype
Implémenter le modèle Singleton en Python
Affectations et modifications des objets Python
Vérifiez et déplacez le répertoire en Python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python
Implémentez rapidement l'API REST en Python
Inverser le pseudonyme plat et le katakana en Python2.7
[GUI en Python] Menu PyQt5 et barre d'outils-
Créer et lire des paquets de messages en Python
Recherche de 2 minutes Python et ses dérivés