1 流程 dist[所有点] = INF dist[起始点] = 0 for( k条边 ) { 复制上一轮情况 扫描所有出边并更新 } 判断是否能走 2 code int bell_man( int u ) { memset( dist, 0x3f, sizeof dist ); dist[u] = 0; for( int i = 0; i < k; i ++ ) { memcpy( back, dist , sizeof dist ); for( int j = 1; j <= m; j ++ ) { int x = a[j], y = b[j], z = c[j]; dist[y] = min( dist[y] , back[x] + z ); } } if( dist[n] >0x3f3f3f3f/2 ) return -1; else return dist[n]; }