#include <iostream>
#include <vector>
using namespace std;
struct Node{
int v;
int dis;
};
const int MAXV = 100;
vector<Node> Adj[MAXV];
int n;
int d[MAXV];
bool vis[MAXV] = { false };
void Dijkstra(int s) {
fill(d, d + MAXV, INT_MAX);//将d数组初始化为最大的int值表示不可达
d[s] = 0;
for (int i = 0; i < n; i++) {
int u = -1, MIN = INT_MAX;
for (int j = 0; j < n; j++){
if (vis[j] == false && d[j] < MIN) {//找到未访问的顶点中d最小的
u = j;
MIN = d[j];
}
}
if (u == -1) return;//如果找不到小于INT_MAX的顶点,说明剩下的顶点都与起点s不连通
vis[u] = true;
for (int j = 0; j < Adj[u].size(); j++) {//获得u所能到达的顶点j
int v = Adj[u][j].v;
if (vis[u] == false && d[u] + Adj[u][j].dis < d[j]) {//如果j未访问而且以u为中间节点的距离优于d[j]
d[j] = d[u] + Adj[u][j].dis;
}
}
}
}