Notas de algoritmo - Búsqueda primero en profundidad/amplitud

Notas de algoritmo - Búsqueda primero en profundidad/amplitud

La búsqueda primero en profundidad y la búsqueda primero en amplitud se utilizan principalmente en el recorrido de gráficos. Tienen muchas plantillas. Personalmente, creo que son algoritmos relativamente simples. Las siguientes son las plantillas para la búsqueda profunda y la búsqueda amplia. Siga las plantillas para hacer más preguntas. puede dominar

búsqueda en profundidad

Proceso:

  1. acceder al vértice inicial especificado
  2. Si hay vértices adyacentes no visitados del vértice visitado actualmente, seleccione uno de los vértices para visitar y luego regrese al primer paso
  3. Si se han visitado todos los vértices adyacentes del vértice actual, devuelve el vértice anterior del vértice actual

Como se muestra en la figura a continuación, de hecho, es visitar el final a lo largo de un borde primero y luego volver a visitar el otro borde.

plantilla

DFS generalmente se implementa por recursividad

 void dfs(int x){
    
    
    if (满足退出条件){
    
     
        退出处理
        return; 
    }
    for (;;){
    
    //枚举当前顶点的下一个邻接顶点
        if (顶点满足条件) {
    
    
            处理顶点
            dfs(顶点);//向下深入遍历
            }
    }
    return ;//退出 
}

Aquí, al enumerar el siguiente vértice adyacente, si está en el gráfico, solía definir primero un vector de dirección y luego lo usaba para enumerar el siguiente vértice.Tome
las cuatro direcciones de arriba, abajo, izquierda y derecha como ejemplo. :
Primero define:

 int fx[4][2] = {
    
    {
    
    -1, 0}, {
    
    0, 1}, {
    
    1, 0}, {
    
    0, -1}};

enumerar:

for (int i = 0; i < 4; i++)
{
    
    
   dfs(x + fx[i][0], y + fx[i][1], board);
}

Búsqueda en amplitud

Proceso:

  1. acceder al vértice inicial especificado
  2. poner en cola todos los vértices adyacentes de un vértice
  3. Regrese al primer elemento de la primera cola de acceso y aparecerá el primer elemento de la cola.

Como se muestra en la figura a continuación, primero agregue los vértices adyacentes del vértice actual a la cola y luego acceda a los vértices adyacentes de la siguiente capa
inserte la descripción de la imagen aquí

plantilla

BFS generalmente se implementa a través de colas

		queue<int> qu;//定义队列
        qu.push(起始顶点);
        while (!qu.empty())
        {
    
    
            auto front = qu.front();
            qu.pop();
            //获得首部顶点并将首部弹出

            for (;;)//遍历当前顶点的所有邻接顶点并加入队列
            {
    
    
                if (邻接顶点符合题目要求)
                {
    
    
                    qu.push(邻接顶点);
                }
            }
        }

La plantilla anterior es solo el ejemplo más básico. Diferentes temas definitivamente serán diferentes. Debe realizar más modificaciones según la plantilla y el significado de la pregunta.

ejemplo

1091. Ruta más corta en matriz binaria
130. Área rodeada

Supongo que te gusta

Origin blog.csdn.net/shn111/article/details/123313243
Recomendado
Clasificación