Professional Documents
Culture Documents
Đường đi ngắn nhất trên đồ thị - Xem lại lần làm thử
Đường đi ngắn nhất trên đồ thị - Xem lại lần làm thử
Nhà của tôi Khoá học 2223II_INT2210_4 Đồ thị Đường đi ngắn nhất trên đồ thị
Cấu trúc dữ liệu và giải thuật (2223II_INT2210_4) Đường đi ngắn nhất trên đồ
thị
Có N điạ điểm trong một thành phố được đánh số từ 1 đến N , có M đường đi nối các địa điểm này với nhau. Tìm đường đi ngắn nhất của tất cả các cặp
đỉnh trên đồ thị.
Đầu vào
Đầu vào từ bàn phím gồm M + 1 dòng. Dòng đầu tiên chứa 2 số nguyên N , M .
(N ≤ 100, M ≤ 5000) M dòng tiếp theo, mỗi dòng chứa 3 số nguyên
u, v, w , thể hiện có đường đi giữa u và v với độ dài w (w ≤ 100) .
Đâu ra
In ra màn hình n dòng N dòng, mỗi dòng gồm N số cách nhau bởi một dấu cách. Số thứ j thuộc dòng thứ i là độ dài đường đi ngắn nhất của từ địa điểm i
đến địa điểm j ( nếu không tồn tại đường đi từ i đến j , ghi ra "-1"\).
For example:
Input Result
5 7 0 132 99 98 127
1 4 98 132 0 33 34 5
3 5 54 99 33 0 1 28
4 3 1 98 34 1 0 29
2 5 5 127 5 28 29 0
5 3 28
4 5 30
2 3 47
Answer:
1 #include<bits/stdc++.h>
2 using namespace std;
3 vector<vector<pair<int,int>>> adj; // luu tru dinh->dinh-dodai
4 int n,m; // so dinh, so canh
5
6
7 void input()
8 ▼ {
9 cin>>n>>m;
10 adj.resize(n+1);
11 while(m--)
12 ▼ {
13 int u,v,w;
14 cin>>u>>v>>w;
15 adj.at(u).push_back({v,w});
16 adj.at(v).push_back({u,w});
17 }
18 }
19
20 int dijkstra(int s, int t)
21 ▼ {
22 vector<long long> d(n+1,INT_MAX); // mang luu duong di chinh
23 d[s] = 0;
24 priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> Q;
25 // luu khoang cach (khoang cach o day la temp -> tap nay la unmarked) - dinh
26 Q.push({0,s});
27 while(!Q.empty())
28 {
Đúng