Estructura de datos de Python y ejemplos de algoritmos de búsqueda de amplitud y profundidad de gráficos.

@ Este artículo proviene del número público: csdn2299, me gusta prestar atención a la academia de programadores de números públicos.
Este artículo describe el algoritmo de búsqueda de amplitud y profundidad de la estructura de datos de Python y el gráfico de algoritmos. Comparta con usted para su referencia, de la siguiente manera:

De acuerdo con la implementación del pseudocódigo de Wikipedia:

Ancho Primero BFS:

Usar cola, colección

Marque el nodo inicial que se ha encontrado y póngalo en la cola

Cada bucle saca un nodo de la cola

Coloque todos los puntos de conexión del nodo en la cola y márquelo como encontrado

A través de la cola, abra todas las puertas en la intersección del laberinto, entre desde una puerta, continúe abriendo la puerta interior y luego regrese a la puerta anterior

"""
 procedure BFS(G,v) is
   let Q be a queue
   Q.enqueue(v)
   label v as discovered
   while Q is not empty
    v ← Q.dequeue()
    procedure(v)
    for all edges from v to w in G.adjacentEdges(v) do
      if w is not labeled as discovered
        Q.enqueue(w)
        label w as discovered
"""
def procedure(v):
  pass
def BFS(G,v0):
  """ 广度优先搜索 """
  q, s = [], set()
  q.extend(v0)
  s.add(v0)
  while q:  # 当队列q非空
    v = q.pop(0)
    procedure(v)
    for w in G[v]:   # 对图G中顶点v的所有邻近点w
      if w not in s: # 如果顶点 w 没被发现
        q.extend(w)
        s.add(w)  # 记录w已被发现

Profundidad primero DFS

Usar pila, colección

El nodo inicial se empuja a la pila

Cada ronda de bucles saca un nodo de la pila y marca que se ha encontrado

Para cada nodo que aparece, coloque todos los nodos que conecta a la cola

A través de la estructura de la pila, profundiza paso a paso.

""""
Pseudocode[edit]
Input: A graph G and a vertex v of G
Output: All vertices reachable from v labeled as discovered
A recursive implementation of DFS:[5]
1 procedure DFS(G,v):
2   label v as discovered
3   for all edges from v to w in G.adjacentEdges(v) do
4     if vertex w is not labeled as discovered then
5       recursively call DFS(G,w)
A non-recursive implementation of DFS:[6]
1 procedure DFS-iterative(G,v):
2   let S be a stack
3   S.push(v)
4   while S is not empty
5      v = S.pop()
6      if v is not labeled as discovered:
7        label v as discovered
8        for all edges from v to w in G.adjacentEdges(v) do
9          S.push(w)
"""
def DFS(G,v0):
  S = []
  S.append(v0)
  label = set()
  while S:
    v = S.pop()
    if v not in label:
      label.add(v)
      procedure(v)
      for w in G[v]:
        S.append(w)

Muchas gracias por leer
. Cuando elegí estudiar Python en la universidad, descubrí que me comía una mala base informática. No tenía una calificación académica. Esto
no es nada que hacer. Solo puedo compensarlo, así que comencé mi propio contraataque fuera de la codificación. El camino, continúe aprendiendo el conocimiento central de Python, el estudio en profundidad de los conceptos básicos de la computadora, resuelto, si no está dispuesto a ser mediocre, ¡únase a mí en la codificación y continúe creciendo!
De hecho, no solo hay tecnología aquí, sino también cosas más allá de esas tecnologías. Por ejemplo, cómo ser un programador exquisito, en lugar de "seda de gallo", el programador en sí es una existencia noble, ¿no? [Haga clic para unirse] quiere ser usted mismo, quiere ser noble, vamos

Publicado 50 artículos originales · 21 alabanzas · Más de 20,000 visitas

Supongo que te gusta

Origin blog.csdn.net/chengxun03/article/details/105545278
Recomendado
Clasificación