1 solutions
-
0
C++ :
#include<iostream> #include<cstring> using namespace std; const int N=1010; int map[N][N],dist[N],num[N]; int n,e; bool dijkstra(int s) { int i,j,minpath,minpoint,pos; int used[N]; memset(used,0,sizeof(used)); for(i=1;i<=n;i++) { num[i]=s; dist[i]=map[s][i]; } used[s]=1; num[s]=-1; pos=s; for(i=1;i<n;i++) { minpoint=0; minpath=0; for(j=1;j<=n;j++) if(used[j]==0&&dist[j]!=0&&(minpath==0||minpath>=dist[j])) { minpoint=j; minpath=dist[j]; pos=j; } if(minpoint==0) return false; if(minpoint==e) return true; used[minpoint]=1; for(j=1;j<=n;j++) if(used[j]==0&&map[minpoint][j]!=0&&(dist[j]==0||dist[j]>=dist[minpoint]+map[minpoint][j])) { dist[j]=dist[minpoint]+map[minpoint][j]; num[j]=pos; } } return true; } void dsf(int i) { if(i!=-1) { dsf(num[i]); cout<<i<<" "; } } int main() { int m,s,i,x,y,len; while(cin>>n>>m>>s>>e) { memset(num,0,sizeof(num)); memset(map,0,sizeof(map)); for(i=1;i<=m;i++) { cin>>x>>y>>len; if(map[x][y]==0||map[x][y]>len) { map[x][y]=len; map[y][x]=len; } } if(dijkstra(s)) { cout<<dist[e]<<endl; i=s; dsf(e); cout<<endl; } else { cout<<"can't arrive"<<endl; } } return 0; }
- 1
Information
- ID
- 10169
- Time
- 1000ms
- Memory
- 32MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By