Files
freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/data-structures/adjacency-list.md
2022-01-20 20:30:18 +01:00

2.8 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d8256367417b2b2512c77 隣接リスト 1 301620 adjacency-list

--description--

グラフはさまざまな方法で表すことができます。 ここでは、隣接リストと呼ばれる方法について説明します。 隣接リストは基本的に箇条書きリストで、左側がノードであり、右側にはそのノードが接続されている他のすべてのノードが列挙されます。 隣接リストの表現を次に示します。

Node1: Node2, Node3
Node2: Node1
Node3: Node1

上のリストでは、Node1Node2Node3 に接続されており、その情報は Node2Node3 が示す接続と一致しているので、無向グラフです。 有向グラフの隣接リストとは、リストの各行が方向を示しているリストのことです。 これが有向グラフであった場合、Node2: Node1 とは、そこでは有向エッジ (枝) が Node2 から Node1 へ向かっているという意味です。 JavaScript オブジェクトの中に入れることで、上の無向グラフを隣接リストとして表すことができます。

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

これは、ノードが文字列ラベルではなく数字だけを持つ配列として、より単純に表現することもできます。

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

--instructions--

JamesJillJennyJeff という 4 つ (4人) のノードを持つ無向グラフとしてソーシャルネットワークを作成してください。 James と Jeff の間、Jill と Jenny の間、および Jeff と Jenny の間にはエッジ / 関係があります。

--hints--

undirected AdjList には 4 つのノードのみが含まれている必要があります。

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

JeffJames の間にはエッジが必要です。

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

JillJenny の間にはエッジが必要です。

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

JeffJenny の間にはエッジが必要です。

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