Pagini recente » Cod sursa (job #1236443) | Cod sursa (job #755614) | Cod sursa (job #1560048) | Cod sursa (job #2055447) | Cod sursa (job #735027)
Cod sursa(job #735027)
#include<vector>
#include<iostream>
#include<cstdio>
#include<algorithm>
#define INF 10000
using namespace std;
typedef vector< vector< pair<int, int> > > Graph;
vector<int> dist;
vector<int> explored;
void print_graph(Graph &graph)
{
for(int i=0; i<graph.size(); i++)
{
cout << i << ": ";
for(int j=0; j<graph[i].size(); j++)
{
cout << graph[i][j].first << "(" << graph[i][j].second << ") ";
}
cout << endl;
}
}
void dij(Graph &graph, int source)
{
dist[source] = 0;
int numexplored = 1; // source
explored[source] = 1;
while(numexplored < graph.size())
{
int minedge = 0;
int mincost = INF;
int edgecost = 0;
for(int i=1; i<graph.size(); i++)
{
if(explored[i] == 1) // search nodes outgoing from explored set
{
for(int j=0; j<graph[i].size(); j++)
{
if(explored[graph[i][j].first] == 0)
{
edgecost = dist[i] + graph[i][j].second;
if(edgecost < mincost)
{
minedge = graph[i][j].first;
mincost = edgecost;
}
}
}
}
}
explored[minedge] = 1;
dist[minedge] = mincost;
numexplored++;
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int N, M, v1, v2, cost;
scanf("%d %d", &N, &M);
Graph graph(N+1, vector< pair<int,int> >());
dist.resize(N+1, INF);
explored.resize(N+1);
for(int i=0; i<M; i++)
{
scanf("%d %d %d", &v1, &v2, &cost);
graph[v1].push_back(make_pair(v2, cost));
}
dij(graph, 1);
for(int i=2; i<=N; i++)
{
printf("%d ", dist[i]);
}
return 0;
}