코스의 짧은 프로젝트에 대한 최소 스패닝 트리의 Prim 's Algorithm을 구현할 프로그램을 작성하고 있습니다. 첫 번째 단계는 무게에 따라 가장자리를 정렬하는 것입니다. 이 코드는 때때로 작동하지만 항상 그런 것은 아닙니다. 여기 큰 배열의 정렬 함수가 실패했습니다
코드이다for(int i = 0; i < graph.edges; ++i)
{
least_remain_edge = i;
for(int k=i+1; k<graph.edges; ++k)
{
if(graph.edge[k][3]<graph.edge[least_remain_edge][3])
{
least_remain_edge = k;
}
}
if(least_remain_edge != i)
{
swap_temp = graph.edge[i][0];
graph.edge[i][0] = graph.edge[least_remain_edge][0];
graph.edge[least_remain_edge][0] = swap_temp;
}
}
graph.edge[i][3]
는 i
번째 에지의 weight
이며 [i][0]
는 에지 기준/이름이다. 이것은 버블 정렬과 같은 것으로, 목록의 나머지 부분에서 가장 작은 것을 찾은 다음 i
번째 자리에 배치합니다. 왜 이것이 항상 작동하지 않는지 나는 알 수 없다!
어떻게 작동하지 않습니까? 그것은 잘못 정렬합니까, 아니면 오류가 발생합니까? – Xymostech
제대로 정렬되지 않습니다. 사실, 정말로 나쁘지. [3,4,1,3]을 가져다가 [1,3,4,3] – FireGarden