Preguntas y análisis del algoritmo de búsqueda en profundidad primero

Preguntas y análisis del algoritmo de búsqueda en profundidad primero

El tema es el siguiente

El niño A está jugando un juego de mensajes con los amigos de ta. Las reglas del juego son las siguientes:

Hay n jugadores, todos los cuales están numerados de 0 a n-1, entre los cuales el número de niño A es 0.
Cada jugador tiene un número fijo de otros jugadores (o puede que no los haya) que pueden transmitir información. La relación de transmisión de información es unidireccional (por ejemplo, A puede transmitir información a B, pero B no puede transmitir información a A).
Cada ronda de información debe transmitirse a otra persona, y la información puede repetirse a través de la misma persona.
Dado el número total de jugadores n, y presione [número de jugador, número de jugador aceptable correspondiente] relación compuesta por una relación de matriz bidimensional . La información de retorno es el número de planes pasados ​​de la pequeña A (número 0) al pequeño socio numerado de n-1 a través de k rondas; si no se puede alcanzar, devuelve 0.

Ejemplo 1:

Entrada: n = 5, relación = [[0,2], [2,1], [3,4], [2,3], [1,4], [2,0], [0,4] ], k = 3

Salida: 3

Explicación: La información comienza en el número 0 de la A pequeña, pasa por 3 rondas y llega al número 4. Hay 3 esquemas, a saber, 0-> 2-> 0-> 4, 0-> 2-> 1-> 4, 0-> 2-> 3-> 4.

Ejemplo 2:

Entrada: n = 3, relación = [[0,2], [2,1]], k = 2

Salida: 0

Explicación: La información no se puede pasar de Small A a No. 2 en 2 rondas

límite:

2 <= n <= 10
1 <= k <= 5
1 <= relación.longitud <= 90, 且 relación [i] .longitud == 2
0 <= relación [i] [0], relación [i] [ 1] <n 且 relación [i] [0]! = Relación [i] [1]

La solución es la siguiente

k representa el número de pasos y cada paso es k-1. Cuando k = 0, deténgase, si resulta que es n-1, entonces res ++.

class Solution {
    
    
    int res=0;
    public int numWays(int n, int[][] relation, int k){
    
    
        dfs(n,relation,k,0);
        return res;
    }
    
    public void dfs(int n,int[][] r,int k,int curr){
    
    
        if (k==0){
    
    
            if (curr==n-1) res++;
        }
        for (int i=0;i<r.length;i++){
    
    
            if (curr==r[i][0] && k>0){
    
    
                dfs(n,r,k-1,r[i][1]);
            }
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43372169/article/details/109956092
Recomendado
Clasificación