杭电2544-Dijkstra算法

来源:互联网 发布:时时彩数据分析大师 编辑:程序博客网 时间:2024/06/06 04:00

此题为求单源最短路径:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define maxn 110#define inf 1<<29int N,M;int mapp[maxn][maxn];int d[maxn];int visit[maxn];int s;void Dijkstra(){int i,j,k;int Min;memset(visit,0,sizeof(visit));visit[s]=1;for(i=1;i<=N;i++){d[i]=mapp[1][i];}d[s]=0;int m;for(i=1;i<N;i++){Min=inf;for(j=1;j<=N;j++){if(!visit[j]&&Min>d[j]){Min=d[j];m=j;}}visit[m]=1;for(j=1;j<=N;j++){if(!visit[j]&&d[m]+mapp[m][j]<d[j]){d[j]=d[m]+mapp[m][j];}}}}int main(){int i,j;int A,B,C;while(~scanf("%d%d",&N,&M)&&(N||M)){//fill(&mapp[0][0],&mapp[maxn][0],inf);fill(&d[0],&d[maxn],inf);for(i=1;i<=N;i++){for(j=1;j<=N;j++){if(i==j)mapp[i][j]=0;else mapp[i][j]=mapp[j][i]=inf;}}for(i=1;i<=M;i++){scanf("%d%d%d",&A,&B,&C);if(mapp[A][B]>C){mapp[A][B]=mapp[B][A]=C;}}s=1;Dijkstra();  cout<<d[N]<<endl;}return 0;}

0 0
原创粉丝点击