요약
내용
특징
- 정점(Vertex)와 간선(Edge)으로 구성된 자료 구조로 간선을 통해 다른 노드와 연결되는 비선형 자료구조이다.
핵심 개념
- 정점(Vertex)
- 그래프에서 개별 객체를 의미한다.
- 데이터를 저장한다.
- 간선(Edge)
- 가중치(Weight)
- 간선에 부여된 값으로, 경로의 비용, 거리 등을 나타낼 수 있다.
- 가중치가 있는 그래프는 가중 그래프라고 부른다.
주요 연산
- 삽입
- 삭제
- 탐색
- 너비 우선 탐색(BFS) 또는 깊이 우선 탐색(DFS)이 자주 사용된다.
종류
- 방향 그래프
- 무방향 그래프
- 가중 그래프
- 비가중 그래프
- 연결 그래프
- 비연결 그래프
예시
- 네트워크 경로 찾기
- 소셜 네트워크 분석
- 경로 탐색
구현체
package main
import "fmt"
type Graph struct {
// 정점과 연결된 정점들의 리스트
vertices map[int][]int
}
// 새로운 그래프 생성
func NewGraph() *Graph {
return &Graph{vertices: make(map[int][]int)}
}
// 간선 추가, 무방향 그래프
func (g *Graph) AddEdge(v1, v2 int) {
g.vertices[v1] = append(g.vertices[v1], v2)
g.vertices[v2] = append(g.vertices[v2], v1)
}
// 정점 출력
func (g *Graph) Display() {
for vertex, edges := range g.vertices {
fmt.Printf("정점 %d: %v\n", vertex, edges)
}
}
func main() {
g := NewGraph()
g.AddEdge(1, 2)
g.AddEdge(1, 3)
g.AddEdge(2, 4)
g.AddEdge(3, 4)
g.AddEdge(4, 5)
fmt.Println("Graph display:")
g.Display()
}
참고