HDOJ--1874--畅通工程续
畅通工程续
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 36731 Accepted Submission(s): 13502
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。
#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
int vis[210],map[210][210],dis[210],n,m,beg,end;
void init(){for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)map[i][j]=map[j][i]=0;elsemap[i][j]=map[j][i]=INF;}
}
void dijkstra(){int i,flag=0;memset(vis,0,sizeof(vis));for(i=0;i<n;i++)dis[i]=map[beg][i];vis[beg]=1;for(i=0;i<n;i++){int j,k,temp=INF;for(j=0;j<n;j++)if(!vis[j]&&temp>dis[j])temp=dis[k=j];if(k==end){flag=1;break;}vis[k]=1;for(j=0;j<n;j++)if(!vis[j]&&dis[j]>dis[k]+map[k][j])dis[j]=dis[k]+map[k][j];}if(flag)printf("%d\n",dis[end]);elseprintf("-1\n");
}
int main(){while(scanf("%d%d",&n,&m)!=EOF){int i;init();for(i=0;i<m;i++){int a,b,cost;scanf("%d%d%d",&a,&b,&cost);if(map[a][b]>cost)map[a][b]=map[b][a]=cost;}scanf("%d%d",&beg,&end);if(beg==end){//就这一点挺坑人的,刚做的时候没考虑到,居然还有起点和终点相同这种情况。 printf("0\n");continue ;}dijkstra();}return 0;
}
SPFA算法实现:
#include<stdio.h>
#include<string.h>
#include<queue>
#define N 210
#define M 2010
#define INF 0x3f3f3f3f
using namespace std;
int dis[N],vis[N],head[N],n,m,edgenum;
struct node{int from,to,cost,next;
}edge[M];
void init(){edgenum=0;memset(head,-1,sizeof(head));
}
void add(int u,int v,int w){node E={u,v,w,head[u]};edge[edgenum]=E;head[u]=edgenum++;
}
void spfa(int beg,int end){queue<int>q;q.push(beg);memset(vis,0,sizeof(vis));memset(dis,INF,sizeof(dis));vis[beg]=1;dis[beg]=0;while(!q.empty()){int u=q.front();q.pop();vis[u]=0;int i;for(i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;if(dis[v]>dis[u]+edge[i].cost){dis[v]=dis[u]+edge[i].cost;if(!vis[v]){vis[v]=1;q.push(v);}}}}if(dis[end]==INF)printf("-1\n");elseprintf("%d\n",dis[end]);
}
int main(){while(scanf("%d%d",&n,&m)!=EOF&&n!=0&&m!=0){init();while(m--){int a,b,cost;scanf("%d%d%d",&a,&b,&cost);add(a,b,cost);add(b,a,cost);}int beg,end;scanf("%d%d",&beg,&end);spfa(beg,end);}return 0;
}
第三种写法
#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
int dis[300][300],n;
void init(){memset(dis,INF,sizeof(dis));for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(i==j)dis[i][j]=dis[j][i]=0;
}
void floyd(){int i,j,k;for(k=0;k<n;k++)for(i=0;i<n;i++)if(dis[i][k]!=INF){for(j=0;j<n;j++)if(dis[i][j]>dis[i][k]+dis[k][j])dis[i][j]=dis[i][k]+dis[k][j];}
}
int main(){int m;//scanf("%d",&m);while(scanf("%d%d",&n,&m)!=EOF){init();while(m--){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(dis[a][b]>c)dis[a][b]=dis[b][a]=c;}floyd();int beg,end;scanf("%d%d",&beg,&end);if(dis[beg][end]==INF)printf("-1\n");elseprintf("%d\n",dis[beg][end]);}return 0;
}
HDOJ--1874--畅通工程续相关推荐
- 杭电 hdu 1874 畅通工程续
第二次 /* THE PROGRAM IS MADE BY PYY */ /*------------------------------------------------------------- ...
- HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...
- HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)
畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
- HDU 1874 畅通工程续 Floyd
畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Time Limit: 3000/1000 MS (Java/Others) Memory L ...
- poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)
畅通工程续,题目链接,点击这里, 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 1874畅通工程续(基础Floyd)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 1874 畅通工程续
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 杭电1874畅通工程续
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
最新文章
- VMWARE HOST-ONLY方式共享上网
- 《数学之美》第5章 隐含马尔可夫模型
- 【 MATLAB】Subspace algorithm Simulation of TOA - Based Positioning
- 摄像机丢失信号及偏色的检测思路
- 质量兴农战略规划-农业大健康·韩长赋:质量效益和竞争力
- PHP7 ini 配置大全
- python random用法_python random 的用法
- linux cpu核数和线程数,cpu个数、核数和线程的理解
- python语言常量_python---01.各类计算机语言,python历史,变量,常量,数据类型,if条件...
- (王道408考研操作系统)第一章计算机系统概述-第一节1:操作系统基本概念以及目标和功能
- 关于C++ const成员的一些细节
- Fedora 9与Windows共享文件
- 个人计算机虚拟化,CPU虚拟化是什么?家用电脑需要开启虚拟化吗?
- 全网首发:12306抢票算法大曝光?(十张图搞定)
- 计算机卷死,一位计算机教师死了,警方在床底发现一张纸,上面写着一些特殊的符号,这... #119615-推理漫画-侦探推理-33IQ...
- pycharm更新pip提示Requirement already satisfied
- java nio oio_java面试题NIO与OIO的区别
- java为Word插入图片水印
- vr计算机方面的应用,AR和VR到底有什么区别,分别应用在哪些方面?
- 建设数字经济引领型城市 CDEC2022中国数字智能生态大会广州举行