//迪杰斯特拉算法的伪码描述
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; }} }
}