//迪杰斯特拉算法的伪码描述
void Dijk(int s){
初始化
for(进行n次循环){
for()
找d[]最小的顶点u
标记已访问u
for()
找u未被访问的邻接点v,能优化的优化d[]
}
}
//example
int n;
bool vis[maxn]={false};
fill(G[0],G[0]+maxn*maxn,inf);
//G[][]
void Dijk(int s){
fill(d,d+maxn,inf);
d[s]=0;
for(int i=0;i<n;i++){
int u=-1,min=inf;
for(int j=0;j<n;j++){
if(vis[j]==false&&d[j]<min){
min=d[j];
u=j;
}
}
if(u==-1) return ;
vis[u]=true;
for(int v=0;v<n;v++){
if(vis[v]==false&&G[u][v]!=inf&&d[v]>G[u][v]+d[u]){
d[v]=G[u][v]+d[u];
}
}
}
}
//Adj
struct node{
int id;
int dis;
};
void Dijk(int s){
fill(d,d+maxn,inf);
d[s]=0;
for(int i=0;i<n;i++){
int u=-1,min=inf;
for(int j=0;j<n;j++){
if(vis[j]==false&&d[j]<min){
min=d[j];
u=j;
}
}
if(u==-1) return ;
vis[u]=true;
for(int j=0;j<Adj[u].size();j++){
int v=Adj[u][j].id;
int dis=Adj[u][j].dis;
if(vis[v]==false&&d[v]>G[u][v]+d[u]){
d[v]=d[u]+dis;
}
}
}
}