图结构练习——最短路径
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一个带权无向图,求节点1到节点n的最短路径。
输入
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
输出
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
示例输入
3 2 1 2 1 1 3 1 1 0
示例输出
1 0
#include <iostream> #define INF 0x3f3f3f3f using namespace std; int mp[110][110]; int main() { int n, m; while (cin >> n >> m) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++)//这个比较重要,因为要求最短的,所以将两个点之间的距离赋为INF { if (i == j) mp[i][j] = 0; else mp[i][j] = INF; } while (m--) { int u, v, t; cin >> u >> v >> t; if (mp[u][v] > t) mp[u][v] = mp[v][u] = t;//双向图 } for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++)//求最短的核心代码 if (mp[i][j] > mp[i][k] + mp[k][j]) mp[i][j] = mp[i][k] + mp[k][j]; cout << mp[1][n] << endl; } return 0; }