杭电2544-Dijkstra算法
2015-11-27 23:59
417 查看
此题为求单源最短路径:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define maxn 110 #define inf 1<<29 int 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 <<endl; } return 0; }
相关文章推荐
- hibernate基于外键的双向1-1关系映射
- 南大软院大神养成计划第十二天
- linux 安装wordpress 无故往外发送大量垃圾邮件
- java异常处理和设计
- 戴旭:未来十年可能惨不忍睹,中国尚未意识到危机的逼近
- 用多种方法交换两个数的值
- C程序的基本结构
- 你写的return null正确吗?
- Leyni, LOLI and Toasts
- 数据库采用多表连接查询,对应javaBean文件连接方式
- jlink_v8原理图
- apt-get
- 3-读书笔记----iOS开发指南:从零基础到App Store上架--iOS表视图
- OFDM的个人笔记
- 1111
- UINavigationController-导航栏主题设置
- 设计模式七之适配器模式和外观模式1
- 大家一起数钢镚
- 在Linux上安装Memcached服务
- Web App开发技巧