Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <math.h>
- #include <algorithm>
- using namespace std;
- int N, M, start, finish;
- int E[1000][1000];
- bool used[1000];
- int dist[1000];
- void dijkstra(int count) {
- if (count == 0)
- return;
- int min_dist = 999999999;
- int min_vertex;
- for (int i = 1; i <= N; i++) {
- if (used[i] == false && dist[i] < min_dist) {
- min_dist = dist[i];
- min_vertex = i;
- }
- }
- used[min_vertex] = true;
- for (int to = 1; to <= N; to++) {
- int len = E[min_vertex][to];
- if (len != -1) {
- dist[to] = min(dist[to], dist[min_vertex] + len);
- }
- }
- dijkstra(count - 1);
- }
- int main() {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- cin >> N >> start >> finish;
- for (int i = 1; i <= N; i++) {
- for (int j = 1; j <= N; j++) {
- int len;
- cin >> len;
- E[i][j] = len;
- }
- }
- for (int i = 1; i <= N; i++)
- dist[i] = 999999999;
- dist[start] = 0;
- dijkstra(N - 1);
- cout << dist[finish] << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement