크 루스 카 르 최소 생 성 트 리
프 림 알고리즘 최소 생 성 트 리 구하 기:https://blog.csdn.net/xindanding/article/details/90763065
크 루 스 칼 알고리즘 은 전제 가 있 습 니 다. 먼저 모든 변 을 가중치 상승 순 으로 배열 에 저장 한 다음 에 배열 요 소 를 옮 겨 다 니 며 회로 가 형성 되 지 않 으 면 이쪽 을 인쇄 해 야 합 니 다.
실현 절차:
1. 인접 행렬 생 성 [0: 정점 에서 자신 에 게 끝 이 없다 는 뜻, 65535: 두 정점 사이 에 끝 이 없다 는 뜻]
결 과 는 다음 과 같다. 0 1 65535 65535 5 1 0 2 65535 3 65535 2 0 3 65535 65535 65535 3 0 4 5 3 65535 4 0
2. 실현:
그림 의 데이터 구조
public class Graph {
String[] vertex = new String[5]; //
int[][] edge = new int[5][5]; //
/ / get 생략, set 방법}
public class MinimunSpanningTree {
private static int edgelength = 0; //
/**
*
* : 1. 2,
* @param g
*/
public static void minimunSpan_kruskal(Graph g){
Edge[] edges = new Edge[100]; // 100 50
int adjvex[] = new int[100]; // 100 ,
//
for(int i = 0; i < adjvex.length; i++){
adjvex[i] = 0;
}
//
for(int i = 1; i < g.getVertex().length; i++){
for(int j = 0; j < i; j++){ // , , ,
if(g.getEdge()[i][j] > 0 && g.getEdge()[i][j] < 65535){
Edge edge = new Edge();
edge.setBegin(j);
edge.setEnd(i); // ,
edge.setWeight(g.getEdge()[i][j]); //
insertIntoEdgeArray(edges, edge);
}
}
}
for(int k = 0; k < edgelength; k++){
System.out.print(" :" + edges[k].getWeight() + " ");
}
System.out.println();
/**
*
*/
for(int i = 0; i < edgelength; i++){
Edge edge = edges[i];
int n = findAdjvex(adjvex, edge.getBegin()); //
int m = findAdjvex(adjvex, edge.getEnd()); //
if(n != m){ // findAdjvex ,
adjvex[n] = m;
System.out.println(" : (" + edge.getBegin() + "," + edge.getEnd() + ")");
}
}
}
/**
*
* @param adjvex
* @param point
* @return
*/
private static int findAdjvex(int[] adjvex, int point){
while(adjvex[point] != 0){
point = adjvex[point];
}
return point;
}
/**
* ,
* @param edges
* @param edge
*/
private static void insertIntoEdgeArray(Edge[] edges, Edge edge){
/**
* edgelength , edgelength
* edgelength 0
*/
for(int i = 0; i <= edgelength; i++) {
Edge arrayEdge = edges[i];
if (arrayEdge == null) {
edges[i] = edge;
edgelength++; // 1
break;
} else {
// i
if (arrayEdge.getWeight() >= edge.getWeight()) {
for (int j = edgelength; j > i; j--) {
edges[j] = edges[j - 1];
}
edges[i] = edge;
edgelength++;
break;
}
}
}
}
}
3. 결과
가중치: 1 가중치: 2 가중치: 3 가중치: 3 가중치: 4 가중치: 5 가중치 최소 변: (0, 1) 가중치 최소 변: (1, 2) 가중치 최소 변: (1, 4) 가중치 최소 변: (2, 3)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.