Daily AtCoder # 26 avec Python

introduction

Dernière fois 25ème jour

#25 Aujourd'hui, je vais résoudre le problème d'introduction de ce qu'on appelle DFS. J'ai fait référence à cet article.

DFS signifie Depth Priority Search. Un nom similaire est la recherche de priorité de largeur (BFS). Comme son nom l'indique, DFS donne l'impression d'aller du point du graphique actuel au point où vous pouvez aller. Explication détaillée

Le problème cette fois est qu'il ne spécifie pas où se trouve s. Alors, tout d'abord, recherchez l'emplacement de '. Lorsque vous trouvez les ', ajoutez les coordonnées de s à la pile (le type est collections.deque, pas la liste). La pile récupère le dernier élément que vous avez mis en premier. Ensuite, définissez la coordonnée de s dans la liste visitée sur 1. La signification de 1 est 0 ou 1 pour juger si elle a été recherchée. Cette liste_vitée est un ensemble de points recherchés. C'est le contenu de dfs.

  1. Tant que la pile est vide.
  2. Sortez le nouveau h, w (emplacement actuel) de la pile
  3. Si h, w vaut «g», renvoie «Oui» et quitte.
  4. Si h et w ne sont pas «g», procédez dans chaque direction. Ce problème se situe dans les directions [1, 0], [-1, 0], [0, 1], [0, -1].
  5. Représente l'emplacement actuel + les coordonnées de la destination dans chaque direction.
  6. Je ne pense pas que la destination soit hors de question, alors continuez.
  7. Si la destination n'est pas '#' et le point non recherché, définissez la liste visitée [coordonnée] sur 1 et ajoutez de nouvelles coordonnées à la pile.
from collections import deque

h_in, w_in = map(int,input().split())
c = [input() for _ in range(h_in)]

for n1,c_w in enumerate(c):
    for n2,c1 in enumerate(c_w):
        if c1 == "s":
            s_h = n1
            s_w = n2

stack = deque([[s_h,s_w]])

visited_list = [[0]*w_in for _ in range(h_in)]
visited_list[s_h][s_w] = 1

def dfs(town, visited_list, stack):
    while len(stack) > 0:
        h, w = stack.pop()
        if town[h][w] == "g":
            return "Yes"
        for j, k in ([1, 0], [-1, 0], [0, 1], [0, -1]):
            new_h, new_w = h+j, w+k
            if new_h < 0 or new_h >= h_in or new_w < 0 or new_w >= w_in:
                continue
            if town[new_h][new_w] != "#" and visited_list[new_h][new_w] == 0:
                visited_list[new_h][new_w] = 1
                stack.append([new_h, new_w])

    return "No"

print(dfs(c,visited_list,stack))

Résumé

Je suis passé par là quand le problème du graphe est sorti, mais je veux étudier dur et pouvoir le résoudre. Je vais continuer à me consacrer car cela ne prendra pas racine avec une seule question. à plus. bonne nuit

Recommended Posts

AtCoder # 36 quotidien avec Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Daily AtCoder # 53 en Python
Daily AtCoder # 33 en Python
AtCoder # 7 tous les jours avec Python
AtCoder # 24 tous les jours avec Python
Daily AtCoder # 37 en Python
AtCoder # 8 tous les jours avec Python
Daily AtCoder # 42 en Python
AtCoder # 21 quotidien avec Python
Daily AtCoder # 17 avec Python
Daily AtCoder # 38 en Python
Daily AtCoder # 54 en Python
Daily AtCoder # 15 en Python
Daily AtCoder # 47 avec Python
Daily AtCoder # 13 en Python
AtCoder # 45 quotidien avec Python
AtCoder # 30 tous les jours en Python
AtCoder # 40 quotidien avec Python
AtCoder # 5 tous les jours avec Python
Daily AtCoder # 28 en Python
AtCoder # 39 quotidien avec Python
Daily AtCoder # 20 en Python
Daily AtCoder # 19 en Python
Daily AtCoder # 52 en Python
Daily AtCoder # 3 en Python
Daily AtCoder # 14 avec Python
Daily AtCoder # 50 avec Python
Daily AtCoder # 26 avec Python
AtCoder quotidien # 4 avec Python
Daily AtCoder # 43 en Python
Daily AtCoder # 29 en Python
Tous les jours avec Python AtCoder # 22
Daily AtCoder # 49 en Python
Daily AtCoder # 27 en Python
AtCoder # 1 tous les jours avec Python
Daily AtCoder # 25 avec Python
Daily AtCoder # 16 en Python
Daily AtCoder # 12 en Python
Daily AtCoder # 48 en Python
Daily AtCoder # 23 en Python
Daily AtCoder # 34 en Python
AtCoder # 51 quotidien avec Python
Daily AtCoder # 31 en Python
Daily AtCoder # 46 en Python
AtCoder # 35 quotidien avec Python
AtCoder # 9 tous les jours avec Python
Daily AtCoder # 44 avec Python
Daily AtCoder # 41 en Python
Atcoder ABC164 A-C en Python
atCoder 173 Python
Atcoder ABC167 A-D en Python
Atcoder ABC165 A-D en Python
Atcoder ABC166 A-E en Python
Atcoder ABC169 A-E en Python
AtCoder ABC177 A-D avec python
[Python] Connaissances de base utilisées dans AtCoder
Quadtree en Python --2