2066
Dijkstra算法求最短路径
#include<bits/stdc++.h>
using namespace std;
const int MAX=0xfffffff;
int mep[1005][1005];
bool vis[1005];//是否访问
int dis[1005];//路程
int st[1005],e[1005]; //相邻的城市和想去的地方
int main(){
int t,s,d;//有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个
int a,b,time;//a,b城市之间的车程是time小时 ,a,b间可以有多条路
while(cin>>t>>s>>d){
//初始化
int mintime=MAX;
memset(st,0,sizeof(st));
memset(e,0,sizeof(e));
for(int i=1;i<=1000;i++){
for(int j=1;j<=1000;j++){
if(i==j)mep[i][j]=0;
else mep[i][j]=MAX;
}
}
while(t--){
scanf("%d%d%d",&a,&b,&time);
// cin>>a>>b>>time;
if(mep[a][b]>time)mep[a][b]=mep[b][a]=time;
}
for(int i=1;i<=s;i++){
scanf("%d",&st[i]);
}
for(int i=1;i<=d;i++){
scanf("%d",&e[i]);
}
for(int i=1;i<=s;i++){
memset(vis,false,sizeof(vis));
vis[st[i]]=true;//相邻的城市不需要时间,默认为起始点
for(int j=1;j<=1000;j++){
dis[j]=mep[st[i]][j];
}
dis[st[i]]=0;//相邻没有距离
int pos;
for(int j=1;j<=1000;j++){
int min=MAX;
for(int k=1;k<=1000;k++){
if(!vis[k]&&dis[k]<min){
min=dis[k];
pos=k;
}
}
vis[pos]=true;//寻找最短路
for(int k=1;k<=1000;k++){
if(!vis[k] && dis[k]>dis[pos]+mep[pos][k]){
dis[k]=dis[pos]+mep[pos][k];
}
}
}
for(int j=1;j<=d;j++){
if(dis[e[j]]<mintime){
mintime=dis[e[j]];
}
}
}
cout<<mintime<<endl;
}
return 0;
}
遇到reference to ’ *** ’ is ambiguous 错误是因为全局变量名和引用的库里面的属性或者方法重名了,改掉就好了。