Cod sursa(job #2324209)

Utilizator hadi.diabDiab Hadi hadi.diab Data 20 ianuarie 2019 13:38:24
Problema Arbore partial de cost minim Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#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;
}