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