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

2.5 KiB

id title challengeType forumTopicId dashedName
587d8256367417b2b2512c77 Lista de adjacência 1 301620 adjacency-list

--description--

Grafos podem ser representados de maneiras diferentes. Aqui, descrevemos uma das maneiras, chamada de lista de adjacência. Uma lista de adjacência é essencialmente uma lista de pontos onde o lado esquerdo é o nó e o lado direito lista todos os outros nós aos quais ele está conectado. Abaixo vemos uma representação de uma lista de adjacência.

Node1: Node2, Node3
Node2: Node1
Node3: Node1

Acima vemos um grafo não direcionado porque Node1 está conectado a Node2 e Node3. Essa informação é consistente com as conexões mostradas em Node2 e Node3. Uma lista de adjacência para um grafo direcionado significaria que cada linha da lista mostra para qual sentido ela vai. Se o comando acima fosse direcionado, Node2: Node1 significaria que a aresta direcionada está apontando de Node2 para Node1. Podemos representar o grafo não direcionado acima como uma lista de adjacência colocando-a dentro de um objeto JavaScript.

var undirectedG = {
  Node1: ["Node2", "Node3"],
  Node2: ["Node1"],
  Node3: ["Node1"]
};

Isso também pode ser representado de maneira mais simples como um array onde os nós só têm números em vez de etiquetas de string.

var undirectedGArr = [
  [1, 2], // Node1
  [0],    // Node2
  [0]     // Node3
];

--instructions--

Crie uma rede social como um grafo não direcionado com 4 nós/pessoas, chamadas James, Jill, Jenny e Jeff. Existem arestas/relações entre James e Jeff, Jill e Jenny, e Jeff e Jenny.

--hints--

undirectedAdjList deve conter apenas quatro nós.

assert(Object.keys(undirectedAdjList).length === 4);

Deve haver uma aresta entre Jeff e James.

assert(
  undirectedAdjList.James.indexOf('Jeff') !== -1 &&
    undirectedAdjList.Jeff.indexOf('James') !== -1
);

Deve haver uma aresta entre Jill e Jenny.

assert(
  undirectedAdjList.Jill.indexOf('Jenny') !== -1 &&
    undirectedAdjList.Jenny.indexOf('Jill') !== -1
);

Deve haver uma aresta entre Jeff e Jenny.

assert(
  undirectedAdjList.Jeff.indexOf('Jenny') !== -1 &&
    undirectedAdjList.Jenny.indexOf('Jeff') !== -1
);

--seed--

--seed-contents--

var undirectedAdjList = {};

--solutions--

var undirectedAdjList = {
  James: ['Jeff'],
  Jill: ['Jenny'],
  Jenny: ['Jill', 'Jeff'],
  Jeff: ['James', 'Jenny']
};