Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int main ()
- {
- int a , b, n , i , sum = 0;
- fstream f;
- f.open("inputDijktra.txt");
- f >> n;
- f >> a;
- f >> b;
- int G[n][n] , len[n] , S[n] , P[n];
- int k = 0 , j = 0;
- // cout << n << " " << a << " "<< b;
- // Creat
- for (int i = 0 ; i < n ; i++)
- {
- for (int j = 0; j < n ; j++)
- {
- f >> G[i][j];
- sum += G[i][j];
- }
- }
- for (int i = 0 ; i < n ; i++)
- {
- for (int j = 0; j < n ; j++)
- {
- if (i != j && !G[i][j]) G[i][j] = sum;
- }
- }
- a--;
- b--;
- for (int i = 0 ; i < n ; i++)
- {
- len[i] = sum;
- S[i] = a;
- P[i] = 0;
- }
- len [a] = 0;
- //Dijktra
- while (!P[b])
- {
- //tim mot vi tri ko phai la vo cung
- for (i = 0 ; i < n ; i++)
- if (!P[i] && len[i] < sum)
- break;
- if (i >= n)
- {
- cout << "Not exist the path " << a << " - > " << b << endl ; break;
- }
- // tim diem co do dai la min
- for (int j = 0 ; j < n ; j++)
- if (!P[j] && len[i] > len[j])
- i = j;
- //cho i vao danh sach xet
- P[i] = 1;
- //tinh lai cac dinh chua xet
- for (int j = 0 ; j < n ; j++)
- if (!P[j] && len[i] + G[i][j] < len[j])
- len[j] = len[i] + G[i][j], S[j] = i;
- }
- cout << "Done Dijktra !" << endl;
- if (len[b] > 0 && len[b] < sum)
- {
- cout << "The Min Length from " << a + 1<< " to " << b + 1 <<" is " << len[b] << endl;
- //truy vet
- while (i != a)
- {
- cout << i + 1<< " <- ";
- i = S[i];
- }
- cout << a + 1;
- }
- else cout << "Not Exist the path from " << a << " to " << b << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement