void Dijkstra(const vector<vector<int>>& path, vector<bool>& flag, vector<int>& res, int v)
{
// path:图 ,flag:顶点集(true:已知,false未知),res:最短路径集,v:初始顶点;
const int n = flag.size();
for (int i = 0; i < n; ++i)
{
res[i] = path[v][i];//初始化起点到各个顶点的最短路径
}
flag[v] = true;//起点放入已知集合
for (int i = 0; i < n; ++i)
{
int tmp = INT_MAX;
int u = v;
for (int j = 0; j < n; ++j)//搜索起点到未知集合顶点的最小边及那个未知顶点
{
if (!flag[j] && res[j] < tmp)//处于未知集合且距离小与当前最小值
{
u = j;
tmp = res[j];
}
}
flag[u] = true;//放入已知集合
for (int j = 0; j < n; ++j)
{
if (!flag[j] && path[u][j] < maxint)//更新从该节点到其他节点的距离
{
res[j] = min(res[j], res[u] + path[u][j]);
}
}
}
}