NC231882. 简单的路径规划问题
描述
输入描述
第一行包含整数 n 和 m。
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。
输出描述
输出一个整数,表示 1 号点到 n 号点的最短距离。
如果路径不存在,则输出 −1
示例1
输入:
3 3 1 2 2 2 3 1 1 3 4
输出:
3
C++ 解法, 执行用时: 121ms, 内存消耗: 2308K, 提交时间: 2021-12-21 19:17:41
#include<bits/stdc++.h> using namespace std; const int maxn=1010; const int inf=1e9; int g[maxn][maxn],n,m; int main () { scanf("%d%d",&n,&m); for (int i=0;i<=n;i++) for (int j=0;j<=n;j++) g[i][j]=inf; while (m--) { int u,v,w; scanf("%d%d%d",&u,&v,&w); g[u][v]=min(g[u][v],w); } for (int k=1;k<=n;k++) for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { if (i!=j) { g[i][j]=min(g[i][j],g[i][k]+g[k][j]); } } if (g[1][n]==inf) printf("-1"); else printf("%d\n",g[1][n]); }