Pagini recente » Cod sursa (job #1136610) | Cod sursa (job #311327) | Cod sursa (job #2136384) | Cod sursa (job #2980340) | Cod sursa (job #584660)
Cod sursa(job #584660)
#include<fstream>
#define inf 10000
using namespace std;
ifstream f("prim.in");
ofstream g("prim.out");
int n,r,i,vfmin,nrv;
double G[100][100],cmin[100],costmin;
int p[100],z[100];
void initializare()
{
int i,j,k;
double c;
f>>n>>r;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
G[i][j]=inf;
for(i=1;i<=n;i++)
{
G[i][i]=0;
f>>nrv;
for(j=1;j<=nrv;j++)
{
f>>k>>c;
G[i][k]=c;
}
}
for(i=1;i<=n;i++)
{
cmin[i]=G[r][i];
p[i]=r;
z[i]=1;
}
z[r]=0;
p[r]=0;
nrv=n-1;
}
void afisare()
{
int i;
double cost=0;
for(i=1;i<=n;i++)
if(i!=r)
{
g<<p[i]<<" "<<i<<"\n";
cost+=G[i][p[i]];
}
g<<"\n";
g<<cost;
}
int main()
{
initializare();
while(nrv)
{
costmin=inf;
for(i=1;i<=n;i++)
if(z[i]&&costmin>cmin[i])
{
costmin=cmin[i];
vfmin=i;
}
z[vfmin]=0;
nrv--;
for(i=1;i<=n;i++)
if(z[i]&&G[i][vfmin]<cmin[i])
{
p[i]=vfmin;
cmin[i]=G[i][vfmin];
}
}
afisare();
return 0;
}