티스토리 뷰
최소비용 신장트리 구현알고리즘 중에서 프림알고리즘을 구현해 보았다.
프림알고리즘은 하나의 노드를 선택해서 다른노드로 가는 최소비용의 간선을 선택하고,
다음에는 선택한 노드중에서 나머지 노드로 가는 최소비용의 간선을 선택하여 최소비용 트리를 구현하는 것이다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package sdk.example.mst; | |
import java.io.FileNotFoundException; | |
/** | |
* 최단거리 신장트리 생성을 위한 프림 알고리즘 구현 | |
* | |
* @author whitebeard-k | |
* | |
*/ | |
public class PrimAlgorithm { | |
public static void main(String[] args) throws FileNotFoundException { | |
int n = 5; | |
int[][] graphs = { { 0, 1, 6, 7, 5 }, | |
{ 1, 0, 2, 9, 8 }, | |
{ 6, 2, 0, 3, 10 }, | |
{ 7, 9, 3, 0, 4 }, | |
{ 5, 8, 10, 4, 0 } }; | |
int[] connected = new int[n]; // 연결여부 확인 | |
connected[0] = 1; // 0번 노드부터 시작 | |
int min = prim(graphs, connected, 0, 1); | |
System.out.println(min); | |
} | |
/** | |
* @param graphs 그래프 간선 가중치 배열 | |
* @param connected 방문여부 배열 | |
* @param value 연결된 노드의 가중치 합 | |
* @param count 현재까지 연결된 노드의 개수 | |
* @return 가중치 최소값 | |
*/ | |
public static int prim(int[][] graphs, int[] connected, int value, int count) { | |
// 모든 노드를 방문하면 종료 | |
if (count == connected.length) | |
return value; | |
int to = -1; | |
int min = Integer.MAX_VALUE; | |
for (int i = 0; i < connected.length; i++) { | |
if (connected[i] == 1) { // 현재 간선이 연결되어 있으면 처리 | |
for (int j = 0; j < graphs.length; j++) { | |
// 현재 연결된 간선들과 연결된 노드중 최소값을 가지는 간선 | |
if (connected[j] == 0 && graphs[i][j] != 0 && min > graphs[i][j]) { | |
to = j; | |
min = graphs[i][j]; | |
} | |
} | |
} | |
} | |
connected[to] = 1; // 최소값 간선을 선택 | |
value += min; // 최소값 추가 | |
count++; // 연결된 간선 개수 추가 | |
return prim(graphs, connected, value, count); | |
} | |
} |
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 큐를 이용하여 스택처럼 사용하기 (0) | 2017.12.01 |
---|---|
[알고리즘] 플로이드 와샬 알고리즘(백준 11404) (0) | 2017.10.12 |
[알고리즘] 조합 (0) | 2017.04.17 |
[알고리즘] 알고리즘 강좌 자료와 온라인 문제 사이트 (0) | 2017.01.17 |
[스크랩] 알고리즘 문제를 풀이하느데 도움이 되는 페이지 (0) | 2016.08.24 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- ubuntu
- 하둡
- HIVE
- mysql
- error
- 백준
- emr
- bash
- java
- AWS
- SPARK
- 다이나믹
- yarn
- 하이브
- Tez
- Hadoop
- oozie
- nodejs
- HDFS
- S3
- hbase
- build
- Python
- Linux
- SQL
- 오류
- 정올
- airflow
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함