Pagini recente » Cod sursa (job #694011) | Istoria paginii runda/muntele_suferintei_2/clasament | Cod sursa (job #1985337) | Istoria paginii utilizator/commercialgas029 | Cod sursa (job #2324209)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <limits.h>
using namespace std;
int N,M,total=0,nr_m=-1,a[1000][1000];
int minCost(int cost[],bool nodparcurs[]){
int minim=INT_MAX,muchie_min;
for(int i=1;i<=N;i++){
if(nodparcurs[i]==false && cost[i]<minim){
minim=cost[i];
muchie_min=i;
}
}
return muchie_min;
}
void afisare(int parent[]){
ofstream o;
o.open("apm.out");
o<<total<<endl;
o<<nr_m<<endl;
for(int i=2;i<=N;i++){
o<<parent[i]<<" "<<i<<endl;
}
}
void parcurgere(int a[1000][1000]){
int parent[10];
int cost[10];
bool nodparcurs[10];
for(int i=1;i<=N;i++){
cost[i]=INT_MAX;
nodparcurs[i]=false;
}
cost[1]=0;
parent[1]=0;
for(int i=1;i<=N;i++){
int k=minCost(cost,nodparcurs);
nodparcurs[k]=true;
total=total+cost[k];
nr_m++;
for(int j=1;j<=N;j++){
if(a[k][j]!=0 && nodparcurs[j]==false && a[k][j]<cost[j]){
parent[j]=k;
cost[j]=a[k][j];
}
}
}
afisare(parent);
}
int main()
{ int x,y,c;
ifstream f;
f.open("apm.in");
f>>N;
f>>M;
for(int i=1;i<=M;i++){
f>>x>>y>>c;
a[x][y]=c;
a[y][x]=c;
}
parcurgere(a);
f.close();
return 0;
}