그래프에서 가장 작은 경로를 찾을 수 있도록 Kruskal 함수를 만들었습니다. 하지만 버블 정렬을 사용하여 그것을 qscort를 사용하여 작동하도록 만들고 구조체를 동적으로 만들려고 노력 중이므로 더 효율적으로 사용할 수 있습니다.그래프의 Kruskal 함수에서 동적 데이터를 사용하여 qsort를 구현하는 방법
사용되는 모든 기능이 작동하지만 의심 스러우면 나에게 요청하여 게시 할 수 있습니다. 나는 연합을 사용하여 pd(dynamcc partition)
을 찾을 수 있습니다.
내 코드는 다음과 같습니다
struct _temp{
float weight;
int source;
int destination;
};
typedef struct _temp Temp;
struct _graph{
int NumberVertex;
int NumberEdges;
float* NeighborMatrix;
};
typedef struct _graph Graph;
struct din_part{
int n;
int*v;
};
typedef struct din_part PartDin;
Graph* grKruskal(Graph* g)
{
Graph* tree_min = graph_Create(g->NumberVertex);
PartDin* p = pd_Create(g->NumberVertex);
int i, j,number_edges=0,n=0,representative;
Temp edges[300],temp;
for (i = 0; i < (g->NumberVertex); i++)
{
for (j = n; j < (g->NumberVertex); j++)
{
if(g->NeighborMatrix[g->NumberVertex * i + j]!=0)
{
edges[number_edges].weight=g->NeighborMatrix[g->NumberVertex * i + j];
edges[number_edges].source=i;
edges[number_edges].destination=j;
number_edges++;
}
}
n++;
}
if(number_edges>0){
for(i=0; i<number_edges; i++)
{
int change=0;
for(j=0 ;j<number_edges-1; j++)
{
if(edges[j].weight >edges[j+1].weight){ // blubble_sort
temp=edges[j];
edges[j]= edges[j+1];
edges[j+1]=temp;
change=1;
}
}
if(!change)
{
for(i=0;i<number_edges;i++)
{
if(pd_Representative(p,edges[i].source)!=pd_Representative(p,edges[i].destination))
{
representative=pd_Union(p,edges[i].source,edges[i].destination);
graph_InsertEdge(arvore_min,edges[i].source,edges[i].destination,edges[i].weight);
}
}
p=pd_Free (p);
return tree_min;
}
}
}
}
로 정의 할 수 있을까? – Gabe
코드를 모듈화하여 (즉, 함수를 사용하여) 시작할 수 있습니다. 모든 것을 하나의 기능으로 묶는 것이 가장 쉬운 방법은 아닙니다. 예를 들어 정렬을 담당하는 새 함수를 만듭니다. – betabandido