freeCodeCamp/curriculum/challenges/portuguese/10-coding-interview-prep/data-structures/adjacency-matrix.md

3.2 KiB

id title challengeType forumTopicId dashedName
587d8256367417b2b2512c78 Matriz de adjacência 1 301621 adjacency-matrix

--description--

Outra forma de representar um grafo é colocá-lo em uma matriz de adjacência. Um matriz de adjacência é um array bidimensional (2D) onde cada array aninhado tem o mesmo número de elementos que o array externo. Em outras palavras, é uma matriz ou grade de números, em que os números representam as arestas.

Observação: os números na parte superior e à esquerda da matriz são apenas etiquetas para os nós. Dentro da matriz, os 1s significam que existe uma aresta entre os vértices (nós) representando a linha e a coluna. Por fim, os zeros significam que não há aresta nem relação.

    1 2 3
  \------
1 | 0 1 1
2 | 1 0 0
3 | 1 0 0

Acima vemos um grafo muito simples e não direcionado onde você tem três nós, onde o primeiro nó está conectado ao segundo e ao terceiro nó. Abaixo, vemos uma implementação em JavaScript da mesma coisa.

var adjMat = [
  [0, 1, 1],
  [1, 0, 0],
  [1, 0, 0]
];

Diferente do que ocorre em uma lista de adjacência, cada "linha" da matriz deve ter o mesmo número de elementos que os nós do grafo. Aqui temos uma matriz três por três, o que significa que temos três nós no nosso gráfico. Um grafo direcionado teria a mesma aparência. Abaixo, vemos um grafo onde o primeiro nó tem uma aresta apontando para o segundo nó e o segundo nó tem uma aresta apontando para o terceiro nó.

var adjMatDirected = [
  [0, 1, 0],
  [0, 0, 1],
  [0, 0, 0]
];

Grafos também podem ter pesos nas arestas. Até agora, tivemos arestas sem peso, onde apenas a presença e a falta de aresta é binária (0 ou 1). Você pode ter pesos diferentes, dependendo da aplicação.

--instructions--

Crie uma matriz de adjacência de um grafo não direcionado com cinco nós. Esta matriz deve estar em um array multidimensional. Estes cinco nós têm relações entre o primeiro e o quarto nó, entre o primeiro e o terceiro nó, entre o terceiro e o quinto nó, e entre o quarto e o quinto nó. O peso de todas as arestas é um.

--hints--

undirectedAdjList deve conter apenas cinco nós.

assert(
  adjMatUndirected.length === 5 &&
    adjMatUndirected
      .map(function (x) {
        return x.length === 5;
      })
      .reduce(function (a, b) {
        return a && b;
      })
);

Deve haver uma aresta entre o primeiro e o quarto nó.

assert(adjMatUndirected[0][3] === 1 && adjMatUndirected[3][0] === 1);

Deve haver uma aresta entre o primeiro e o terceiro nó.

assert(adjMatUndirected[0][2] === 1 && adjMatUndirected[2][0] === 1);

Deve haver uma aresta entre o terceiro e o quinto nó.

assert(adjMatUndirected[2][4] === 1 && adjMatUndirected[4][2] === 1);

Deve haver uma aresta entre o quarto e o quinto nó.

assert(adjMatUndirected[3][4] === 1 && adjMatUndirected[4][3] === 1);

--seed--

--seed-contents--

var adjMatUndirected = [];

--solutions--

var adjMatUndirected = [
  [0, 0, 1, 1, 0],
  [0, 0, 0, 0, 0],
  [1, 0, 0, 0, 1],
  [1, 0, 0, 0, 1],
  [0, 0, 1, 1, 0]
];