POJ 2387 Til the Cows Come Home(Dijkstra)

来源:互联网 发布:做贝斯四线谱软件 编辑:程序博客网 时间:2024/05/18 17:27

题目链接:POJ 2387

分析:直接套Dijkstra的模版。

CODE:

#include <iostream>#include <cstring>#include <string>using namespace std;const int maxint=0x3f3f3f;const int maxnum=1005;int dis[maxnum];int pre[maxnum];int c[maxnum][maxnum];int n,t;void Dijkstra(int n,int v,int *dis,int *pre, int c[maxnum][maxnum]){int vis[maxnum];memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){dis[i]=c[v][i];if(dis[i]==maxint) pre[i]=0;else pre[i]=v;}dis[v]=0;vis[v]=1;for(int i=1;i<=n;i++){int tmp=maxint;int u=v;for(int j=1;j<=n;j++){if((!vis[j])&&dis[j]<tmp){tmp=dis[j];u=j;}}vis[u]=1;for(int j=1;j<=n;j++){if((!vis[j])&&c[u][j]<maxint){if(c[u][j]+dis[u]<dis[j]){dis[j]=c[u][j]+dis[u];pre[j]=u;}}}}}void SearchPath(int *pre,int v,int u){int path[maxnum];int tot=1;path[tot++]=u;int tmp=pre[u];while(tmp!=v){path[tot++]=tmp;tmp=pre[tmp];}path[tot]=v;for(int i=tot;i>=1;i--){if(i==1) cout<<path[i]<<endl;else cout<<path[i]<<"->";}}int main(){#ifdef LOCALfreopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);#endif while(cin>>t>>n){for(int i=1;i<=n;i++){dis[i]=maxint;for(int j=1;j<=n;j++)c[i][j]=maxint;}int p,q,len;for(int i=1;i<=t;i++){cin>>p>>q>>len;if(len<c[p][q])c[p][q]=c[q][p]=len;}Dijkstra(n,1,dis,pre,c);//SearchPath(pre,1,n);cout<<dis[n]<<endl;}return 0;}


0 0
原创粉丝点击