const int MAX=101,INF=0x3f3f3f3f;
int cost[MAX][MAX];//cost[i][j]表示顶点i到顶点j的权值
int d[MAX];//顶点s出发的最短路径
bool used[MAX];//已经访问过的点
int V;//顶点数
void Dijkstra(int s){
memset(d,INF,sizeof(d));//fill(d,d+V,INF);
memset(used,false,sizeof(used));//fill(used,used+V,false);
d[s]=0;
for (int i=1;i<=V;i++){
int mi=INF;
for (int i=1;i<=V;i++){
if (!used[i]&&d[i]<mi){
mi=d[i];
s=i;
}
}
used[s]=1;
for (int i=1;i<=V;i++){
if (cost[s][i]!=INF){
d[i]=min(d[i], d[s] + cost[s][i]);
}
}
}
}
//(Floyd-Wrashall算法)(求任意两点之间的最小距离)
const int MAX=210,INF=0x3f3f3f3f;
int cost[MAX][MAX];//cost[i][j]表示顶点i到顶点j的权值
int d[MAX];//顶点s出发的最短路径
bool used[MAX];//已经访问过的点
int V;//顶点数
void floyd(){
for(int k=1;k<=V;k++) {
for (int i=1;i<=V;i++) {
for (int j=1;j<=V; j++) {
cost[i][j]=min(cost[i][j], cost[i][k] + cost[k][j]);
}
}
}
}