한 걸음 한 걸음 알고리즘 (크 루 스 칼 알고리즘 아래)
앞에서 크 루스 칼 의 알고리즘 을 토론 할 때 우 리 는 알고리즘 의 기본 과정, 기본 데이터 구조 와 알고리즘 에서 해결 해 야 할 세 가지 문제 (정렬, 판단, 합병) 를 분석 했다.오늘 우 리 는 나머지 부분의 내용 을 계속 완성 했다.합병 함수 에서 우 리 는 두 개의 기본 함수, find 를 호출 했다.tree_by_index 와 deletemini_tree_from_group, 아래 상세 한 계산 과정 을 제시 합 니 다.
MINI_GENERATE_TREE* find_tree_by_index(MINI_GENERATE_TREE* pTree[], int length, int point)
{
int outer;
int inner;
for(outer = 0; outer < length; outer++){
for(inner = 0; inner < pTree[outer]->node_num; inner ++){
if(point == pTree[outer]->pNode[inner])
return pTree[outer];
}
}
return NULL;
}
void delete_mini_tree_from_group(MINI_GENERATE_TREE* pTree[], int length, MINI_GENERATE_TREE* pIndex)
{
int index;
for(index = 0; index < length; index ++){
if(pIndex == pTree[index])
break;
}
memmove(&pTree[index +1], &pTree[index], sizeof(MINI_GENERATE_TREE*) * (length -1 - index));
return;
}
크 루 스 칼 의 최소 생 성 트 리 를 만 들 수 있 습 니 다. 코드 는 다음 과 같 습 니 다.MINI_GENERATE_TREE* _kruskal(MINI_GENERATE_TREE* pTree[], int length, DIR_LINE* pLine[], int number)
{
int index;
if(NULL == pTree || NULL == pLine)
return NULL;
for(index = 0; index < number; index ++){
bubble_sort((void**)pLine, number, compare, swap);
if(2 == isDoubleVectexExistInTree(pTree, length, pLine[index]->start, pLine[index]->end))
continue;
mergeTwoMiniGenerateTree(pTree, length, pLine[index]->start, pLine[index]->end, pLine[index]->weight);
length --;
}
return (1 != length) ? NULL : pTree[0];
}
위의 계산 을 하려 면 우 리 는 정점 의 개수, 선분 의 개 수 를 계산 해 야 하기 때문에 함 수 는 더욱 완선 하고 보충 해 야 한다.MINI_GENERATE_TREE* kruskal(GRAPH* pGraph)
{
MINI_GENERATE_TREE** pTree;
DIR_LINE** pLine;
int count;
int number;
if(NULL == pGraph)
return NULL;
count = pGraph->count;
number = get_total_line_number(pGraph);
pTree = get_tree_from_graph(pGraph);
pLine = get_line_from_graph(pGraph);
return _kruskal(pTree, count, pLine, number);
}
이렇게 해서 크 루스 카 르 알고리즘 은 대체로 끝 난 셈 이다. 그 중에서 gettotal_line_number、get_tree_from_graph、get_line_from_graph 함 수 는 모두 비교적 간단 합 니 다. 여러분 은 스스로 계속 완성 할 수 있 지만 잘 테스트 해 야 합 니 다.요약:
(1) 코드 에서 메모리 의 방출 문 제 를 고려 하지 않 고 개선 과 향상 이 필요 합 니 다.
(2) 일부 코드 는 prim 알고리즘 의 내용 을 복용 할 수 있 고 데이터 구조 도 같다
(3) 알고리즘 의 작성 은 이해 하 는 것 이 중요 하 다. 절차 가 맞 으 면 테스트 까지 하면 보통 문제 가 크 지 않다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.