본문 바로가기
TIL/ZTM Data Structures and Algorithms

ZTM Data Structures & Algorithms - Graph

by Dev_Dank 2021. 8. 28.

https://www.geeksforgeeks.org/graph-data-structure-and-algorithms/

 

Graph Data Structure And Algorithms - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

- 그래프는 정점(vertex)과 엣지(edge) 로 이루어진 자료구조이다. 
- 하나의 정점에서 출발하여 다시 해당 정점으로 돌아올수있다면 Cyclic 이라하며 아닐경우 Acyclic 이라한다. 
- 하나의 정점에서 갈수있는 방향이 정해져있는경우(directed)와 아닌경우(undirected) 로 구분 할 수 도 있다. 

- 그래프를 표현할때는 인접행렬, 인접리스트, 엣지리스트 로 그래프를 표현 할 수 있다. 

undirected 인접리스트로 그래프를 구현하면 아래와 같이 될수 있다. 

class Graph {
constructor() {
this.numberOfNodes = 0;
this.adjacentList = {
};
}
addVertex(node) {
if (this.adjacentList[node]) {
return;
}
this.adjacentList[node] = [];
this.numberOfNodes++;
}
addEdge(node1, node2) {
//undirected Graph
this.adjacentList[node1].push(node2);
this.adjacentList[node2].push(node1);
}
showConnections() {
const allNodes = Object.keys(this.adjacentList);
for (let node of allNodes) {
let nodeConnections = this.adjacentList[node];
let connections = "";
let vertex;
for (vertex of nodeConnections) {
connections += vertex + " ";
}
console.log(node + "-->" + connections);
}
}
}
const myGraph = new Graph();
myGraph.addVertex('0');
myGraph.addVertex('1');
myGraph.addVertex('2');
myGraph.addVertex('3');
myGraph.addVertex('4');
myGraph.addVertex('5');
myGraph.addVertex('6');
myGraph.addEdge('3', '1');
myGraph.addEdge('3', '4');
myGraph.addEdge('4', '2');
myGraph.addEdge('4', '5');
myGraph.addEdge('1', '2');
myGraph.addEdge('1', '0');
myGraph.addEdge('0', '2');
myGraph.addEdge('6', '5');
myGraph.showConnections();
//Answer:
// 0-->1 2
// 1-->3 2 0
// 2-->4 1 0
// 3-->1 4
// 4-->3 2 5
// 5-->4 6
// 6-->5

댓글