#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn = 1e2 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
int t, n, m, a[maxn][maxn], vis[maxn], dis[maxn], minx, pos, cnt;
char s[maxn], s2[maxn];
void Dijkstra() {
for(int i = 1; i <= n; i++) {
dis[i] = a[1][i];
}
memset(vis, 0, sizeof(vis));
vis[1] = 1;
for(int i = 1; i <= n - 1; i++) {
minx = INF;
for(int j = 1; j <= n; j++) {
if(!vis[j] && dis[j] < minx) {
minx = dis[j];
pos = j;
}
}
vis[pos] = 1;
for(int j = 1; j <= n; j++) {
if(a[pos][j] < INF) {
if(dis[j] > dis[pos] + a[pos][j]) {
dis[j] = dis[pos] + a[pos][j];
}
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin >> n >> m;
//初始化处理
for(int i = 0; i <= n; i++) {
for(int j = 0; j <= n; j++) {
if(i == j) {
a[i][j] = 0;
} else {
a[i][j] = INF;
}
}
}
while(m--) {
int t1, t2, t3;
cin >> t1 >> t2 >> t3;
if(a[t1][t2] > t3) {
a[t1][t2] = t3;
}
}
Dijkstra();
}
最短路--Dijkstra
最新推荐文章于 2024-08-23 17:57:03 发布