Nodos adyacentes en un grafo dirigido

Un grafo dirigido es como un grafo no dirigido, excepto que cada arista tiene una dirección desde un nodo de origen hasta un nodo de destino.

Grafo 1

En este grafo, el nodo 0 es adyacente al nodo 1, pero el nodo 1 no es adyacente al nodo 0. Si el grafo no fuera dirigido, se vería así:

Grafo 2

En un grafo dirigido, invertir una arista crea un grafo diferente:

Grafo 3A

Grafo 3B

La matriz de adyacencia de un grafo no dirigido es simétrica con respecto a su diagonal principal, pero la de un grafo dirigido no tiene que serlo. Un 1 en la fila i y la columna j significa que hay una arista desde el nodo i hasta el nodo j.

Adyacencia del grafo 1

El grafo de la imagen puede representarse mediante esta matriz de adyacencia:

[[0, 1, 1, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 1], [1, 0, 0, 0, 0]]

El nodo 1 no tiene aristas salientes, por lo que toda su fila contiene ceros. Un nodo sin aristas entrantes tendría una columna compuesta únicamente por ceros.

Instrucciones

Dada la matriz de adyacencia de un grafo dirigido y dos índices de nodo válidos, devuelve si el primer nodo es adyacente al segundo. Examina la celda ubicada en la fila de origen y la columna de destino; la dirección importa.

Ejemplos

adjacent([[0, 1, 1, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 1], [1, 0, 0, 0, 0]], 0, 1) # => True
adjacent([[0, 1, 1, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 1], [1, 0, 0, 0, 0]], 1, 0) # => False

Notas

  • Los grafos pueden tener hasta 25,000 nodos.
  • El límite de tiempo es de 100 milisegundos, así que examina únicamente la celda solicitada.