1 流程 dist[所有点] = +∞ dist[起始点] = 0 for( n 次循环 ) { 找出未被标记的节点中dist最小的节点t st[t] = true 用t更新其他所有出点 } 判断是否能走 2 code int dijstra( int u ) { memset( dist, 0x3f, sizeof dist ); dist[u] = 0; for( int i = 0; i < n; i ++ ) { int t = 0; for( int j = 1; j <= n ; j ++ ) { if( !st[t] && ( t == 0 || dist[t] > dist[j])) t = j; } st[t] = true; for( int k = 1; k <= n; k++ ) dist[k] = min( dist[k], dist[t] + g[t][k] ); } if( dist[n] == 0x3f3f3f3f ) return -1; else return dist[n]; }