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]);
}
}
}
}