Algorithme en Python (recherche de priorité de largeur, bfs)

introduction

Je vais expliquer la mise en œuvre de la recherche de priorité de largeur en utilisant python. (Il suffit de mettre celui que je mets toujours en œuvre.) La recherche de priorité à la largeur soulève souvent le problème de la distance, nous allons donc cette fois implémenter une fonction qui renvoie la distance d'un sommet à chaque sommet.

Recherche de priorité de largeur

Je pense que beaucoup de connaissances générales sur la recherche de priorité de largeur sortiront si vous la recherchez, donc je vais l'omettre en détail, mais je vais l'expliquer brièvement.    89922.jpg Comme indiqué par la flèche bleue, suivez les sommets dans l'ordre du plus proche. Pour la distance à gérer cette fois, ajoutez 1 à la distance au sommet précédent. (Dans l'image, il est secoué à partir de 1, mais s'il s'agit d'une distance, il peut être secoué à partir de 0.) L'ordre de recherche de ce sommet est géré par la file d'attente. Une file d'attente est une structure de données premier entré, premier sorti. Dans cet exemple, le début 0 est entré en premier. ([0]) Ensuite, retirez le contenu de l'avant et examinez les sommets adjacents. (1 et 2 cette fois) Si vous visitez pour la première fois, ajoutez-le à la file d'attente. ([1, 2]) Si vous répétez ceci, vous pouvez examiner les sommets dans l'ordre des flèches bleues. ([2, 3, 4]→[3, 4, 5, 6]→[4, 5, 6, 7]...) La recherche se termine lorsque la file d'attente est vide. Vive le bon travail.

la mise en oeuvre

contribution

Étant donné le nombre de sommets n et le nombre de côtés m, alors les sommets adjacents sont donnés sur m lignes.

11 9
0 1
0 2
1 3
1 4
2 5
2 6
3 7
5 8
8 9

code

import sys
input = sys.stdin.readline

n, m = [int(x) for x in input().split()] #n est le nombre de sommets, m est le nombre de côtés
g = [[] for _ in range(n)] #Liste adjacente

for _ in range(m):
    a, b = [int(x) for x in input().split()]
    g[a].append(b)
    g[b].append(a)

from collections import deque

def bfs(u):
    queue = deque([u])
    d = [None] * n #Initialisation de la distance de u
    d[u] = 0 #La distance par rapport à moi-même est de 0
    while queue:
        v = queue.popleft()
        for i in g[v]:
            if d[i] is None:
                d[i] = d[v] + 1
                queue.append(i)
    return d

#Distance de chaque sommet de 0
d = bfs(0)
print(d)

production

Génère une liste avec la distance du sommet 0 dans l'ordre du nombre de vertex à partir de la gauche. La distance à vous-même est de 0 et les sommets que vous ne pouvez pas atteindre sont Aucun.

[0, 1, 1, 2, 2, 2, 2, 3, 3, 4, None]

en conclusion

S'il vous plaît laissez-moi savoir si vous avez des erreurs! Je vous serais reconnaissant si vous pouviez me donner quelques conseils!

Recommended Posts

Algorithme en Python (recherche de priorité de largeur, bfs)
[Python] BFS (recherche de priorité de largeur) ABC168D
Algorithme en Python (dichotomie)
Algorithme en Python (recherche de priorité en profondeur, dfs)
Implémenter la recherche de priorité en profondeur (DFS) et la recherche de priorité de largeur (BFS) en python
Algorithme en Python (ABC 146 C Dichotomy
Exercice Python Recherche prioritaire sur 1 largeur
Dichotomie avec Python
Algorithme génétique en python
Algorithme en Python (méthode Bellman-Ford, Bellman-Ford)
Recherche linéaire en Python
Recherche binaire en Python
Algorithme en Python (Dijkstra)
Algorithme en Python (jugement premier)
Recherche de priorité de largeur / recherche bidirectionnelle (édition Python)
Algorithme de recherche utilisant word2vec [python]
Recherche binaire en Python / C ++
Reproduire la méthode de division mutuelle euclidienne en Python
Implémenter l'algorithme de Dijkstra en python
[Python] Recherche de priorité de profondeur et recherche de priorité de largeur
J'ai essayé d'implémenter la recherche de priorité de largeur avec python (file d'attente, dessin personnalisé)
Ecrire une dichotomie en Python
Algorithme de tri et implémentation en Python
Recherche de priorité de largeur (BPF) Peut-être compris (python)
Algorithme Python
Ecrire des algorithmes A * (A-star) en Python
Développons un algorithme d'investissement avec Python 2
Écrire une recherche de priorité en profondeur en Python
Implémentation d'un algorithme simple en Python 2
Algorithme (arborescence de segments) en Python (s'entraîner)
Exécutez un algorithme simple en Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Livre Ali en python: méthode Dyxtra Sec.2-5
Rechercher et lire des vidéos YouTube avec Python
Rechercher le labyrinthe avec l'algorithme python A *
Ecrire une méthode de cupidité simple en Python
À la recherche du FizzBuzz le plus rapide en Python
Algorithme d'alignement par méthode d'insertion en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Mémorandum Python (algorithme)
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python