bool vis[N]; int dis[N]; int g[N][N]; // 邻接矩阵 int s; voiddijkstra(int s){ int n = g.size(); for (int i = 0; i < n; i++) { dis[i] = INF; vis[i] = false; }
dis[s] = 0; // 起点到自己的距离为0 for (int i = 0; i < n; i++) { int u = -1; int MIN = INF; for (int j = 0; j < n; j++) { // 找到距离起点最近的点 if (vis[j] == false && dis[j] < MIN) { u = j; // u为距离起点最近的点 MIN = dis[j]; // MIN为距离起点最近的点的距离 } } if (u == -1) return; // 找不到小于INF的dis[u],说明剩下的顶点和起点s不连通 vis[u] = true; for (int v = 0; v < n; v++) { if (vis[v] == false && g[u][v] != INF && dis[u] + g[u][v] < dis[v]) { // 如果v未访问 && u能到达v && 以u为中介点可以使dis[v]更优 dis[v] = dis[u] + g[u][v]; } } }
for (int i = 0; i < n; i++) { cout << dis[i] << " "; } }