1 2 3Above is a very simple, undirected graph where you have three nodes, where the first node is connected to the second and third node. Note: The numbers to the top and left of the matrix are just labels for the nodes. Below is a JavaScript implementation of the same thing. ```js var adjMat = [ [0, 1, 1], [1, 0, 0], [1, 0, 0] ]; ``` Unlike an adjacency list, each "row" of the matrix has to have the same number of elements as nodes in the graph. Here we have a three by three matrix, which means we have three nodes in our graph. A directed graph would look similar. Below is a graph where the first node has an edge pointing toward the second node, and then the second node has an edge pointing to the third node. ```js var adjMatDirected = [ [0, 1, 0], [0, 0, 1], [0, 0, 0] ]; ``` Graphs can also have weights on their edges. So far, we have unweighted edges where just the presence and lack of edge is binary (
------
1 | 0 1 1
2 | 1 0 0
3 | 1 0 0
0
or 1
). You can have different weights depending on your application.
undirectedAdjList
should only contain five nodes.
testString: assert((adjMatUndirected.length === 5) && adjMatUndirected.map(function(x) { return x.length === 5 }).reduce(function(a, b) { return a && b }) , 'undirectedAdjList
should only contain five nodes.');
- text: There should be an edge between the first and fourth node.
testString: assert((adjMatUndirected[0][3] === 1) && (adjMatUndirected[3][0] === 1), 'There should be an edge between the first and fourth node.');
- text: There should be an edge between the first and third node.
testString: assert((adjMatUndirected[0][2] === 1) && (adjMatUndirected[2][0] === 1), 'There should be an edge between the first and third node.');
- text: There should be an edge between the third and fifth node.
testString: assert((adjMatUndirected[2][4] === 1) && (adjMatUndirected[4][2] === 1), 'There should be an edge between the third and fifth node.');
- text: There should be an edge between the fourth and fifth node.
testString: assert((adjMatUndirected[3][4] === 1) && (adjMatUndirected[4][3] === 1), 'There should be an edge between the fourth and fifth node.');
```