前两天自学了一点点最短路..看起来很简单的样子...
就去kuangbin的专题找了最简单的一道题练手..然后被自己萌萌的三重for循环超时虐的不要不要的~
松弛虽然会但是用的十分之不熟练...
代码~
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int tance[1005][1005]; bool vis[1005]; int dis[1005]; int t,n; void sc() { for(int i=1;i<=n;i++) vis[i]=true; vis[1]=false; for(int i=2;i<=n;i++) { dis[i]=tance[1][i]; } dis[1]=0; for(int i=1;i<=n-1;i++) { int minwhere; int min=999999; for(int k=2;k<=n;k++) { if(vis[k]==true&&dis[k]<min) { min=dis[k]; minwhere=k; } } vis[minwhere]=false; for(int k=2;k<=n;k++) { if(vis[k]==true) { if(dis[k]>dis[minwhere]+tance[minwhere][k]) { dis[k]=dis[minwhere]+tance[minwhere][k]; } } } } return ; } int main(){ while(~scanf("%d%d",&t,&n)) { memset(tance,105,sizeof(tance)); int a,b,c; for(int i=1;i<=t;i++) { scanf("%d%d%d",&a,&b,&c); if(tance[a][b]>c) { tance[a][b]=tance[b][a]=c; } } sc(); printf("%d\n",dis[n]); } }
时间: 2024-10-19 08:51:55