int n, A, B; int cost[MAX_N][MAX_N]; int vis[MAX_N]; int dis[MAX_N];
voidDijistra() { for(int i = 1; i <= n; ++i) //每个点都访问一次 { int x, m = INF; for(int y = 1; y <= n; ++y) //找到和y最近的点 if(!vis[y] && dis[y] <= m) m = dis[x = y];
vis[x] = 1; for(int y = 1; y <= n; ++y) //松弛/更新其它边 dis[y] = min(dis[y], dis[x] + cost[x][y]); } }