회고
학습(알고리즘)
Happy Programmer
2022. 8. 7. 23:50
1.인접리스트는 행렬보다 더 적은 공간을 차지하며 모든 간선 순환은 더 빠르지만 특정 간선 존재여부를 확인하는 것은 행렬보다 느리다.
2.그래프의 정점, 간선 추가 및 제거는 다음과 같이 구현할 수 있다.
class Graph{ // 그래프 생성
constructor(){
this.list = {};
}
addVertex(vertex){
if(!this.list[vertex]) this.list[vertex] = []; // 정점이 없는 경우 정점에 빈 배열 추가
}
addEdge(v1,v2){ //간선이 추가될 경우 양쪽에 각자 추가
this.list[v1].push(v2);
this.list[v2].push(v1);
}
removeEdge(vertex1,vertex2){ // 간선을 제거할 경우 양쪽에서 filter로 해당 간선 제거
this.list[vertex1] = this.list[vertex1].filter(
el => el !== vertex2
);
this.list[vertex2] = this.list[vertex2].filter(
el => el !== vertex1
);
}
removeVertex(vertex){ //정점을 제거할 경우
while(this.list[vertex].length){ // 정점 내부가 비어있는지 확인(0이면 중단)
const adjacentVertex = this.list[vertex].pop(); //정점에 연결된 다른 정점들 조회 (pop으로 하나씩 뽑아서 아래에서 제거)
this.removeEdge(vertex, adjacentVertex); //위에서 찾은 점점에서 제거할 정점으로 연결된 간선 제거
}
delete this.list[vertex] //이 정점으로 연결해오는 간선들을 모두 제거했으면 현재 정점 제거
}
}