HDU1874---畅通工程续(dijkstra&&SPFA)
来源:互联网 发布:linux vi 搜索 下一个 编辑:程序博客网 时间:2024/05/21 07:08
#include<stdio.h>#include<string.h>#define M 1000007#define inf 0xffffffusing namespace std;int n,m,map[222][222],dist[222],vis[222];void dijkstra(int u){ memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) dist[i]=map[u][i]; dist[u]=0; vis[u]=1; for(int i=0;i<n;i++) { int pos=u,min=inf; for(int j=0;j<n;j++) if(!vis[j] && dist[j]<min) { pos=j; min=dist[j]; } vis[pos]=1; for(int j=0;j<n;j++) { if(!vis[j] && dist[j]>dist[pos]+map[pos][j]) dist[j]=dist[pos]+map[pos][j]; } }}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) map[i][j]=inf; int a,b,c; for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); if(c<map[a][b]) map[a][b]=map[b][a]=c; } int q,w; scanf("%d%d",&q,&w); dijkstra(q); if(dist[w]!=inf) printf("%d\n",dist[w]); else printf("-1\n"); }}
SPFA
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;#define inf 0x3f3f3f3;int map[1100][1100],dis[1100],used[1100],t,s,d,n,m,st,ed;void inti(){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i==j) map[i][j]=0; else map[i][j]=inf;}int SPFA(int u){ for(int i=0;i<n;i++) dis[i]=inf; dis[u]=0; used[u]=1; queue <int> q; q.push(u); while(!q.empty()) { int now=q.front(); q.pop(); used[now]=0; for(int i=0;i<n;i++) { if(dis[i]>dis[now]+map[now][i]) {dis[i]=dis[now]+map[now][i]; if(!used[i]) { q.push(i); used[i]=1; } } } } int MIN=inf; if(dis[ed]==MIN) return -1; else return dis[ed];}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { inti(); int a,b,c; for(int i=0;i<m;i++) {scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) map[a][b]=map[b][a]=c; } scanf("%d%d",&st,&ed); int k=SPFA(st); printf("%d\n",k); }}
Floyd
#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <vector>#include<queue>#include <string>#include <stack>using namespace std;#define inf 0xfffffint map[205][205];int n,m;void init(){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i==j) map[i][j]=0; else map[i][j]=map[j][i]=inf;}void floyd(){ for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(map[i][k]+map[k][j]<map[i][j]) map[i][j]=map[i][k]+map[k][j];}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { init(); int a,b,c; for(int i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) map[a][b]=map[b][a]=c; } floyd(); scanf("%d%d",&a,&b); if(map[a][b]==inf) printf("-1\n"); else printf("%d\n",map[a][b]); }}
0 0
- HDU1874:畅通工程续(Dijkstra/Floyd/SPFA)
- HDU1874---畅通工程续(dijkstra&&SPFA)
- hdu1874畅通工程续【最短路dijkstra&&SPFA&&floyd】
- hdu1874 畅通工程续(Dijkstra/Floyd/Bellman-Ford/SPFA)
- hdu1874畅通工程续 (dijkstra)
- hdu1874 畅通工程续(Dijkstra)
- hdu1874畅通工程续dijkstra
- HDU1874 畅通工程续【Dijkstra】
- 【HDU1874】畅通工程续【dijkstra】
- HDU1874-畅通工程续(Dijkstra)
- HDU1874-畅通工程续(SPFA)
- hdu1874畅通工程续 spfa学习
- hdu1874 畅通工程续 spfa/迪杰斯特拉
- HDU1874 畅通工程续 解题报告--Dijkstra
- HDU1874畅通工程续 dijkstra&&floyd
- HDU1874-畅通工程续-最短路(dijkstra)
- HDU1874 畅通工程续 (dijkstra,floyd)
- HDU1874:畅通工程续(最短路Dijkstra(n^2+nlogn)+Floyd+SPFA(堆栈+队列))
- MyEclipse6.5的反编译插件
- 【RTSP/RTP流媒体】2、利用VLC搭建演示环境
- sql server 实现lastIndexOf
- 开始刷leetcode day10:Sqrt(x)
- js 将json字符串转换为json对象
- HDU1874---畅通工程续(dijkstra&&SPFA)
- SqlServer实现oracle10g的 wmsys.wm_concat()
- 日经社説 20150512 公正で活発なコメの取引市場が必要だ
- Clob转换成String类型
- 解决java中两个double类型的值相加
- SSI技术
- java实现图片与base64字符串之间的转换
- android面试题总结加强版(三)
- MySQL高可用浅析