HDU 1596(find the safest road) 最短路(SPFA&FLOYD&Dijkstra)
来源:互联网 发布:excel2010软件下载 编辑:程序博客网 时间:2024/05/18 10:03
此题最短路稍微变形,求乘积最长路,即乘积最大的那条路,题给出了5000MS时间限制,SPFA、FLOYD和Dijkstra暴力都可解。
顶点1000个,最多开一个n*n, 2个n的数组,SPFA中如果用数组q[n]来维护队列的话就会出错。
SPFA:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<algorithm>using namespace std;double map[1001][1001],dis[1001];int visit[1001];int vex,arc;void Spfa(int s){ int i,pos; for(i=0;i<=vex;i++) { visit[i]=0; dis[i]=0; } queue<int>q; q.push(s); visit[s]=1; dis[s]=1.0; while(!q.empty()) { pos=q.front(); q.pop(); visit[pos]=0; for(i=1;i<=vex;i++) { if(i==pos) continue; if(dis[i]<dis[pos]*map[pos][i]) { dis[i]=dis[pos]*map[pos][i]; if(!visit[i]) { q.push(i); visit[i]=1; } } } }}int main(){ int i,j,a,b; while(scanf("%d",&vex)!=EOF) { memset(map,0,sizeof(map)); for(i=1;i<=vex;i++) { for(j=1;j<=vex;j++) { scanf("%lf",&map[i][j]); } } scanf("%d",&arc);//输入要求的边 for(i=1;i<=arc;i++) { scanf("%d%d",&a,&b); Spfa(a); if(dis[b]!=0.0) printf("%.3lf\n",dis[b]); else printf("What a pity!\n"); } } return 0;}FLOYD:
#include<stdio.h>#include<string.h>#include<stdlib.h>double map[1001][1001];int vex,arc;void Floyd(){ int i,j,k; for(k=1;k<=vex;k++) { for(i=1;i<=vex;i++) { for(j=1;j<=vex;j++) { if(map[i][j]<map[i][k]*map[k][j]) map[i][j]=map[i][k]*map[k][j]; } } }} int main(){ int i,j,a,b; while(scanf("%d",&vex)!=EOF) { memset(map,0,sizeof(map)); for(i=1;i<=vex;i++) { for(j=1;j<=vex;j++) { scanf("%lf",&map[i][j]); } }//输入矩阵 Floyd(); scanf("%d",&arc);//输入要求的边 for(i=1;i<=arc;i++) { scanf("%d%d",&a,&b); if(map[a][b]!=0.0) printf("%.3lf\n",map[a][b]); else printf("What a pity!\n"); } } return 0;}
Dijkstra:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<algorithm>using namespace std;double map[1001][1001],dis[1001];int visit[1001];int vex,arc;void Dijkstra(int s){ int i,j,pos; double max; for(i=1;i<=vex;i++) { visit[i]=0; dis[i]=map[s][i]; } visit[s]=1; dis[s]=1.0; for(i=1;i<=vex-1;i++) { max=0.0; for(j=1;j<=vex;j++) { if(!visit[j] && dis[j]>max) { max=dis[j]; pos=j; } } visit[pos]=1; for(j=1;j<=vex;j++) { if(!visit[j] && dis[j]<dis[pos]*map[pos][j]) { dis[j]=dis[pos]*map[pos][j]; } } }}int main(){ int i,j,a,b; while(scanf("%d",&vex)!=EOF) { memset(map,0,sizeof(map)); for(i=1;i<=vex;i++) { for(j=1;j<=vex;j++) { scanf("%lf",&map[i][j]); } } scanf("%d",&arc);//输入要求的边 for(i=1;i<=arc;i++) { scanf("%d%d",&a,&b); Dijkstra(a); if(dis[b]!=0.0) printf("%.3lf\n",dis[b]); else printf("What a pity!\n"); } } return 0;}
0 0
- HDU 1596(find the safest road) 最短路(SPFA&FLOYD&Dijkstra)
- 【最短路+dijkstra+floyd+spfa】1596 find the safest road
- hdu 1596 find the safest road (最短路径dijkstra SPFA Floyd)
- HDU-1596 find the safest road(最短路[Dijkstra])
- hdu 1596 find the safest road 最短路 FLoyd算法
- HDU Problem 1596 find the safest road【最短路dijkstra】
- 【HDU】-find the safest road(最短路)(dijkstra)
- HDOJ 1596 find the safest road ((最短路变形) Dijkstra && SPFA)
- hdu1596 find the safest road【最短路dijkstra&&SPFA】
- HDOJ 1596 find the safest road(floyd最短路)
- find the safest road(floyd最短路)
- HDU 1596find the safest road(最短路变形)
- HDU 1596 find the safest road (最短路)
- HDU 1596 find the safest road【dijkstra & floyed & SPFA 】
- HDU 1596:find the safest road【Dijkstra & SPFA】
- HDU 1596 find the safest road dijkstra&&SPFA
- find the safest road HDU杭电1596【Dijkstra || SPFA】
- hdu 1596 find the safest road(dijkstra||floyd)
- javascript 无缝滚动源码
- Linux 进程通信(System V)管道
- 3.2一Wnd窗口基类的设计
- JS将时间截转成时间格式
- iOS多线程的初步研究(三)-- NSRunLoop
- HDU 1596(find the safest road) 最短路(SPFA&FLOYD&Dijkstra)
- 存储过程(一) 基础语句块、参数、变量
- iOS多线程的初步研究(四)-- NSTimer
- hadoop全分布模式的详细操作
- Linux 进程通信(System V)消息队列
- hdu1864(最大报销额 DP动态规划)
- oauth2.0认证和授权原理以及视频教程
- LVS的DR模型工作流程从ip数据层的详细分析
- Cocos| 3D建模规范及注意事项