题目大意:给出一个有向图,求从某点到另一点的最短路径
解决:迪杰斯特拉求単源点到其它点的最短路径
#include <iostream> using namespace std; #define N 200 #define MAX 0xffffff int cost[N+10][N+10]; int vis[N+10]; int dist[N+10]; int n; void init() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) cost[i][j]=MAX; } int dijistra(int start,int end) { for(int i=0;i<n;i++) { dist[i]=cost[start][i]; vis[i]=false; } vis[start]=1; dist[start]=0; int pre; for(int i=1;i<n;i++) { int min=MAX; for(int j=0;j<n;j++) if(!vis[j] && dist[j]<min){min=dist[j];pre=j;} vis[pre]=1; for(int j=0;j<n;j++) if(!vis[j] && min+cost[pre][j]<dist[j]) { dist[j]=min+cost[pre][j]; } } return dist[end]; } int main() { int m; while(cin>>n>>m) { int i,a,b,w; init(); for(i=0;i<m;i++) {//刚开始一直wa,就是因为没写这句话 cin>>a>>b>>w; if(w<cost[a][b]) { cost[a][b]=cost[b][a]=w; } } cin>>a>>b; int ret=dijistra(a,b); if (ret==MAX)cout<<"-1"<<endl; else cout<<ret<<endl; } // system("pause"); return 0; }