1874-畅通工程续
http://acm.hdu.edu.cn/showproblem.php?pid=1874
题意:略。
思路:最短路dijkstra模板,不过要先要把题里输入的把两点间距离赋值给构建的矩阵。
dijkstra算法
#include<bits/stdc++.h> using namespace std; #define inf 99999999 #define maxn 210 int maps[maxn][maxn], dis[maxn], visited[maxn]; int n, m; using namespace std; int dijkstra(int s, int t) { for(int i = 0; i < n; i++) { dis[i] = maps[s][i]; visited[i] = 0; } dis[s] = 0; visited[s] = 1; int temp, k; //这个循环的意思是把这一点的这一行都找到最短路径 for(int i = 0; i < n; i++) { temp = inf; //找最小距离的一点 for(int j = 0; j < n; j++) { if(visited[j] == 0 && temp > dis[j]) { k = j; temp = dis[j]; } } //这一点没有与别的点相连,跳出循环 if(temp == inf) break; visited[k] = 1; for(int j = 0; j < n; j++) { if(dis[j] > dis[k] + maps[k][j]) dis[j] = dis[k] + maps[k][j]; } } if(dis[t] == inf) return -1; else return dis[t]; } int main() { int a, b, x, s, t, ans; while(scanf("%d %d", &n, &m) != EOF) { //构建矩阵,是各点之间的距离 for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) maps[i][j] = (i == j ? 0 : inf); while(m--) { scanf("%d%d%d", &a, &b, &x); //把两点间距离赋值给矩阵 if(x < maps[a][b]) maps[a][b] = maps[b][a] = x; } scanf("%d %d", &s, &t); ans = dijkstra(s, t); printf("%d\n", ans); } return 0; }
floyd算法:
待补充
原文地址:https://www.cnblogs.com/Kohinur/p/8903454.html
时间: 2024-10-16 00:35:16