题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874
最短路裸题,点很小,可以用Floyd
而且是单源最短路,也可以用Dijkstra(见下)
贴代码
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=205;
int g[maxn][maxn],d[maxn];
bool vis[maxn];
int m,n;
int main(){
// freopen("1874.in","r",stdin);
// freopen("1874.out","w",stdout);
while (scanf("%d%d",&n,&m)!=EOF){
memset(d,0x3f,sizeof(d));
memset(vis,0,sizeof(vis));
memset(g,0x3f,sizeof(g));
while (m--){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
x++;y++;
if (z<g[x][y])g[x][y]=g[y][x]=z;
}
for (int i=1;i<=n;i++)g[i][i]=0;
int s,t,min,k;
scanf("%d%d",&s,&t);
s++;t++;
d[s]=0;
for (int i=1;i<=n;i++){
min=d[0];k=0;
for (int j=1;j<=n;j++)
if ((!vis[j])&&(d[j]<min))k=j,min=d[j];
vis[k]=1;
for (int j=1;j<=n;j++)
if (d[k]+g[k][j]<d[j])d[j]=d[k]+g[k][j];
};
// for (int i=1;i<=n;i++)printf("%d %d\n",i,d[i]);
if (d[t]==d[0])printf("-1\n");
else printf("%d\n",d[t]);
}
return 0;
}
【写的有漏洞的,欢迎路过大神吐槽】
2017/07/24 22:54:56
Ending.