Pagini recente » Cod sursa (job #2312867) | Cod sursa (job #884272) | Cod sursa (job #2128687) | Cod sursa (job #2916788) | Cod sursa (job #903765)
Cod sursa(job #903765)
#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 (dist[i]==min)
{
poz=i;
break;
}
return poz;
}
void dijkstra (int start)
{
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++)
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);
cost[a].push_back(c);
}
dijkstra(1);
return 0;
}