今天又水了一道dijstra。。。。。。
#include<iostream> #include<string.h> #include<algorithm> #include<limits.h> #define M 99999999 #define N 205 #define FOR(i,s,t) for(int i=(s);i<=t;++i) using namespace std; int dist[N]; int map[N][N]; bool visit[N]; int m,n,p,q; void Dijstra( ) { cin>>p>>q ; FOR(i,0,n-1) { dist[i]=M; visit[i]=true; } dist[p]=0; visit[p]=false; FOR(i,0,n-1) { FOR(j,0,n-1) if(visit[j]&&dist[j]>dist[p]+map[p][j]) dist[j]=dist[p]+map[p][j]; int minx=M; FOR(j,0,n-1) if(visit[j]&&dist[j]<minx) minx=dist[p=j]; visit[p]=false; if(minx==M) break; } if(dist[q]==M) cout<<"-1"<<endl; else cout<<dist[q]<<endl; } int main() { while(cin>>n>>m) { FOR(i,0,n-1) FOR(j,0,n-1) map[i][j]=M; FOR(i,1,m) { int a,b,c; cin>>a>>b>>c; if(map[a][b]>c) map[a][b]=map[b][a]=c; } Dijstra( ); } return 0; }