int FindMinCost(int arr[],int i,int j){ if(i==j){ return 0; } int k; int min=INT_MAX; int result; for(k=i;k<j;k++){ result=FindMinCost(arr,i,k)+FindMinCost(arr,k+1,j)+arr[i-1]*arr[k]*arr[j]; if(min>result){ min=result; } } return result; }
void Prim(Graph *G) { int n,t,i = 0; CLOSSET[0] = 1; Updatelowcost(G); CLOSSET[G->nodeN]++; while(CLOSSET[G->nodeN]<G->nodeN) { n = FindMinCost(G); t = NODESET[n]; edgeSet[i].v1 = n; edgeSet[i++].v2 = t; printf("%c-%c\n",G->data[n],G->data[t]); s += LOWCOST[n]; CLOSSET[t] = 1; CLOSSET[G->nodeN]++; Updatelowcost(G); } }