도 최소 스패닝 트리 (프림 알고리즘)

최소 스패닝 트리

정의 : 무게 나무 가장자리 (고려)과의 최소 스패닝 트리

꼼꼼한

프림의 알고리즘 : 알고리즘 프림의 알고리즘, 그래프 이론,도 통신의 최소 무게 스패닝 트리에 대한 검색.

시는 : 알고리즘은 체코 수학자 Woyijiehe에 의해 1930 년에 발견되었다 · 로얄 닉 (보이 텍 자닉)와 독립적으로 미국의 컴퓨터 과학자 로버트 프림 1957 년 (로버트 C. 프림)에 의해 발견, 1959 년, Aizi GE는 · 다 익스트라의 알고리즘을 다시 발견했다. 따라서, 어떤 경우에는, 프림의 알고리즘은 DJP 알고리즘으로 알려진, 또는 닉 프림 야르 알고리즘입니다 - YAR 닉 알고리즘.

특정 아이디어 알고리즘

정보는 스패닝 트리 최소의 메모리 맵을 모든 점 배열 [] 작성 ①
트리의 정점이 2 차원 배열의 포인트로부터도 거리에있는 모든 정점을 얻기 위해 추가 걸친 최소 아웃 ②와 어레이 정보를 갱신 []
③ 정보 갱신 배열 [], 트리 최단 거리에 걸친 최소의 정점의 위치에 기반
스패닝 트리 최소의 정점에 첨가 하였다 ④와 어레이 정보를 [] 업데이트 :
어떤 정점 거리가 새로 추가 된 정점에 첨가하지 않으면 이하의 거리의 최소 스패닝 트리 이전 정점보다 정보의 배열 업데이트
모든 번호 ⑤ ③④ 동작 배열 정보 []는 0, 즉, 모든 정점이 최소 스패닝 트리에 존재할 때까지 반복된다

도표

그림 삽입 설명 여기
① 새로운 배열 정보 [6]이다 정보 [A -1 ( 제로 배열)와, 최소 스패닝 트리의 정점까지의 거리를 나타내는
그림 삽입 설명 여기
배열 {0,6,1를 업데이트하는 제 정점 (1)에 공급된다 ②, 5, 최대, 최대} (최대이고 최대 값)이
그림 삽입 설명 여기
최소의 값을 알 수는 ③ 해당 정점 3, 1, 최소 스패닝 트리를 첨가
다른 거리 정점 {1,5,0,5,6에 가장 3 식별 4} 및 {0,6,1,5 이전에 그려진, 최대, 최대} 비교하여 작은 값을 대체한다, 즉 짧은 경로 {0,5,0,5,6 어레이가 업데이트되고 4}
그림 삽입 설명 여기
4 ④ 최소값 정점 6 대응 최소 스패닝 트리 첨가 알아내는
작업이 해당 줄을 반복하기 전의

그림 삽입 설명 여기

그림 삽입 설명 여기

그림 삽입 설명 여기

자세한 코드

/**
  * 构建最小生成树,求得最短路径
  * @param sMap 图
  * @param first 开始构建树时加入的第一个结点
  * @return 最短路径
  */
 public int createMinProTree(SimpleMap sMap,int first) {
  	//构建一个数组,用于存储当前图到其他结点的最小权值
  	int[] minInfo = new int[sMap.num];
  	int lenghth = 0;
  	//初始化数组(从1(数组中索引为0)开始构建)
  	System.out.println("加入顶点:"+first);
  	for(int i=0; i<sMap.num; i++) {
   		//第一列存储最小权值
   		minInfo[i] = sMap.map[first-1][i];   
  	}
  	//最小生成树中顶点数
  	int number = 1;
  	while(number < 6) {
   		//遍历当前数组,找到距离最短的路径对应的顶点加入
   		int minValue = CreateAMap.MAX;
   		int index = 0;
   		for(int i=0; i<sMap.num; i++) {
   			 if(minInfo[i] !=0 && minValue > minInfo[i]) {
     				minValue = minInfo[i];
     				index = i;
    			}
   		}
   		//将index对应的顶点加入树中,更新树中数据(保持其他顶点到树的距离最短)
   		System.out.println("加入顶点:"+(index+1));
   		lenghth += minValue;
   		minInfo[index] = 0;
   		for(int i=0; i<sMap.num; i++) {
    			if(minInfo[i] > sMap.map[index][i]) {
     				minInfo[i] = sMap.map[index][i];
    			}
   		} 
   		number++;
  	}  
  	return lenghth;
 }

결과 그림

그림 삽입 설명 여기

게시 88 개 원래 기사 · 원 찬양 2 · 조회수 1,735

추천

출처blog.csdn.net/qq_41891805/article/details/105300074