Реферат: Графы. Решение практических задач с использованием графов (С++)
for(int i=0;i<n;i++){
SST[num_edge] = E[i]; num_edge++; //добавляем ребро
// если появляется цикл - удаляем
if(cycle(SST[num_edge-1].end,SST[num_edge-1].beg))num_edge--;
for(int i=0;i<n;i++)nov[i]=1;
}
}
void out(edge *mas,int num){ // вывод ребер
int sum=0;
fprintf(fo,"%d\n",num); // количество ребер
for(int i=0;i<num;i++){
fprintf(fo,"%d\ %d\ %3d\n",mas[i].beg,mas[i].end,mas[i].weigh);
sum+=mas[i].weigh;
}
fprintf(fo,"%s%d","Вес найденного остова: ",sum);
}
int main(){
fscanf(fi,"%d",&n); //считываем количество ребер
E = new edge[n];
SST = new edge[n];
nov = new bool[n+1];
for(int i=0;i<n;i++)nov[i] = 1;
for(int i=0;i<n;i++) //заполняем множество ребер
fscanf(fi,"%d%d%d3",&E[i].beg,&E[i].end,&E[i].weigh);
kruskal(); //строим остов
out(SST,num_edge); //выводим в файл
return 0;
}
5.Для заданного неориентированного графа найдите максимальное паросочетание.