Pagini recente » Cod sursa (job #34239) | Cod sursa (job #1987560) | Cod sursa (job #3170643) | Cod sursa (job #2703528) | Cod sursa (job #954818)
Cod sursa(job #954818)
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
#define inf 1000000000
#define maxn 50005
vector <int>vec[maxn], cost[maxn];
int dist[maxn], ok[maxn];
int noduri, muchii, nr;
int minimul()
{
int i, min;
min=inf;
for (i=1; i<=noduri; i++)
if ((ok[i]<min)&&((ok[i]!=0)||(nr!=1)))
{
min=ok[i];
nr=1;
}
return min;
}
int poz_min(int min)
{
int i,poz;
for (i=1;i<=noduri;i++)
if (ok[i]==min)
{
poz=i;
break;
}
return poz;
}
void dijkstra (int start)
{
unsigned int i,j,k,min;
ofstream g("dijkstra.out");
for (i=1;i<=noduri;i++)
if (i==start)
{
dist[i]=0;
ok[i]=0;
}
else
{
dist[i]=inf;
ok[i]=inf;
}
k=0;
while (k<noduri)
{
min=minimul();
i=poz_min(min);
ok[i]=0;
for (j=0;j<vec[i].size();j++)
{
if (cost[i][j]+min<dist[vec[i][j]])
{
dist[vec[i][j]]=cost[i][j]+min;
ok[vec[i][j]]=cost[i][j]+min;
}
}
k=k+1;
}
for (i=2;i<=noduri;i++)
{
if (dist[i]==inf)
dist[i]=0;
g<<dist[i]<<" ";
}
}
int main()
{
int i,a,b,c;
ifstream f("dijkstra.in");
f>>noduri>>muchii;
for (i=1;i<=muchii;i++)
{
f>>a>>b>>c;
vec[a].push_back(b);
//vec[b].push_back(a);
cost[a].push_back(c);
//cost[b].push_back(c);
}
dijkstra(1);
return 0;
}