Pagini recente » Cod sursa (job #1637975) | Cod sursa (job #3132919) | Cod sursa (job #25187) | Cod sursa (job #58594) | Cod sursa (job #362086)
Cod sursa(job #362086)
//Algoritmul lui Prim
#include<fstream>
#define Nmax 10000
#define infinit 200000000
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
long c[Nmax][Nmax],s[Nmax];
long cmin[Nmax],pre[Nmax],n,m;
long long cost=0;
struct muchie
{int x,y;
};
muchie L[Nmax];
void citire()
{int i,j,x,y,cost;
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
{c[i][j]=infinit;
c[j][i]=infinit;
}
for(i=1;i<=m;i++)
{fin>>x>>y>>cost;
c[x][y]=cost;
c[y][x]=cost;
}
for(i=1;i<=n;i++)
{cmin[i]=c[1][i];
pre[i]=1;
}
}
void prim()
{long i,k=0,min,v;
s[1]=1;
while(k<n-1)
{min=infinit;
for(i=1;i<=n;i++)
if(!s[i] && cmin[i]<min)
{min=cmin[i];
v=i;
}
k++;
s[v]=1;
L[k].x=pre[v];
L[k].y=v;
cost=cost+min;
for(i=1;i<=n;i++)
if(!s[i] && cmin[i]>c[v][i])
{cmin[i]=c[v][i];
pre[i]=v;
}
}
fout<<cost<<'\n';
fout<<n-1<<'\n';
for(i=1;i<=n-1;i++)
fout<<L[i].x<<" "<<L[i].y<<'\n';
}
int main()
{citire();
prim();
fin.close();
fout.close();
return 0;
}