Pagini recente » Cod sursa (job #1915938) | Cod sursa (job #2752786) | Cod sursa (job #2114468) | Cod sursa (job #1817860) | Cod sursa (job #903749)
Cod sursa(job #903749)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int minimul(int ok[], int noduri)
{
int i,min;
min=10000;
for (i=1;i<=noduri;i++)
if ((ok[i]<min)&&(ok[i]!=-1))
min=ok[i];
return min;
}
int poz_min(int dist[], int noduri, int min)
{
int i,poz;
for (i=1;i<=noduri;i++)
if (dist[i]==min)
{
poz=i;
break;
}
return poz;
}
void dijkstra (vector <int> vec[],vector <int> cost[], int start, int noduri)
{
int dist[noduri+1],ok[noduri+1],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]=10000;
ok[i]=10000;
}
k=0;
while (k<noduri)
{
min=minimul(ok,noduri);
i=poz_min(dist,noduri,min);
ok[i]=-1;
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=1;i<=noduri;i++)
g<<dist[i]<<" ";
}
int main()
{
int noduri,muchii,i,a,b,c;
ifstream f("dijkstra.in");
f>>noduri>>muchii;
vector <int> vec[noduri+1],cost[noduri+1];
for (i=1;i<=muchii;i++)
{
f>>a>>b>>c;
vec[a].push_back(b);
cost[a].push_back(c);
}
dijkstra(vec,cost,1,noduri);
return 0;
}