Pagini recente » Cod sursa (job #2290438) | Cod sursa (job #2823118) | Cod sursa (job #1373180) | Cod sursa (job #1277016) | Cod sursa (job #1501261)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int inf = 0x3f3f3f3f;
int n, start, a, b, cost;
int dist[105];
vector < pair <int, int> > graf[105];
class cmp
{
public:
bool operator () (int &x, int &y)
{
return dist[x] > dist[y];
}
};
priority_queue <int, vector <int>, cmp> Heap;
void dijkstra(int start)
{
int next_nod, next_cost;
memset(dist, inf, sizeof dist);
Heap.push(start);
dist[start] = 0;
while (!Heap.empty())
{
int nod = Heap.top();
Heap.pop();
for (const auto &it : graf[nod])
{
next_nod = it.first; next_cost = it.second;
if (dist[next_nod] > dist[nod] + next_cost)
{
dist[next_nod] = dist[nod] + next_cost;
Heap.push(next_nod);
}
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
fin >> n >> start;
while (fin >> a >> b >> cost)
graf[a].push_back(make_pair(b, cost));
dijkstra(start);
for (int i = 1; i <= n; i++)
fout << (dist[i] == inf ? 0 : dist[i]) << " ";
return 0;
}