http://lx.lanqiao.org/problem.page?gpid=T15
方法一:使用二維數組來存放
#include <stdio.h> #include <string.h> #define MAXN 0x7fffffff int main () { int n , m , u , v , l; scanf ("%d%d" , &n , &m); short int s[n+1][n+1]; short int flag[n+1]; memset (s , 0x7f , sizeof (s)); memset (flag , 0 , sizeof (flag)); for (int i = 0; i < m; i++) { scanf ("%d%d%d" , &u , &v , &l); s[u][v] = l; } for (int i = 1; i < n; i++) { int minLen = MAXN; int minJ = 0; for (int j = 2; j <= n; j++) { if (s[1][j] < minLen && flag[j] == 0) { minLen = s[1][j]; minJ = j; } } flag[minJ] = 1; for (int j = 2; j <= n; j++) { if (s[minJ][j] < MAXN && s[minJ][j] + minLen < s[1][j]) s[1][j] = s[minJ][j] + minLen; } } for (int i = 2; i <= n; i++) printf ("%d\n" , s[1][i]); return 0; }
但是浪費大量的空間,所以,只能得到80分。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。