POJ 1847 - Shortest Path Dijstra>SPFA
来源:互联网 发布:我国纯网络银行有哪些 编辑:程序博客网 时间:2024/05/17 01:02
1.Question:
又一个火车网络系统
输入第一行:
n,a,b
分别代表网络中 节点的个数,初始节点,终止节点
接下来n行分别代表第i个节点的有向边的终点
每一行第一个代表的是有向边的个数,之后的第一个有向边的权值是0,之后的权值都是1
现在请给出从a到b的最短的路径权值和
2.Solution:
本题是标准的最短路径的问题
并且数据量比较水,所以说,我们的很多的最短路径好的算法都可以完成,不仅仅是单源最短路径,我们的Floyed的全局最短路径算法甚至也可以在题目的限制时间内完成
我在代码中对三种算法
Dijstra,SPFA,Floyed算法都进行了测试
在最终的权衡下,SPFA算是相对的额效率最高的一种算法(当然,针对这道题的单元最短路的性质之下)
3.Code:
#include"iostream"#include"cstdio"#include"cstring"#include"cstdlib"#define N 105#define INF 0x7ffffffusing namespace std;int dis[N];int n,a,b,k;bool book[N];int map[N][N];/*Problem: 1847 User: lantianheyeqiMemory: 732K Time: 32MSLanguage: G++ Result: Acceptedvoid dijstra(){memset(book,0,sizeof(book));for(int i=1;i<=n;i++){dis[i]=map[a][i];}book[a]=1;dis[a]=0;for(int i=1;i<=n-1;i++){int mink=INF;int minpoint;for(int j=1;j<=n;j++){if(book[j]==0&&dis[j]<mink){mink=dis[j];minpoint=j;}}book[minpoint]=1;for(int j=1;j<=n;j++){if(book[j]==0&&map[minpoint][j]<INF&&dis[j]>dis[minpoint]+map[minpoint][j]){dis[j]=dis[minpoint]+map[minpoint][j];}}}}*//*Problem: 1847 User: lantianheyeqiMemory: 736K Time: 16MSLanguage: G++ Result: Acceptedvoid SPFA(){memset(book,0,sizeof(book));for(int i=1;i<=n;i++){dis[i]=INF;}book[a]=1;dis[a]=0;int queue[N*N];int head=1;int tail=2;queue[1]=a;while(head!=tail){for(int i=1;i<=n;i++){if(map[queue[head]][i]<INF&&dis[i]>dis[queue[head]]+map[queue[head]][i]){dis[i]=dis[queue[head]]+map[queue[head]][i];if(book[i]==0){book[i]=1;queue[tail++]=i;}}}book[queue[head]]=0;head++;}}*//*Problem: 1847 User: lantianheyeqiMemory: 732K Time: 32MSLanguage: G++ Result: Accepted*/void floyed(){for(int k=1;k<=n;k++)for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(map[i][j]>map[i][k]+map[k][j]) map[i][j]=map[i][k]+map[k][j]; } }}int main(){while(scanf("%d%d%d",&n,&a,&b)!=EOF){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j) map[i][j]=0; //小心这一句 else map[i][j]=INF;}} for(int i=1;i<=n;i++){scanf("%d",&k);for(int j=1;j<=k;j++){int dy;scanf("%d",&dy);if(j==1) map[i][dy]=0;else map[i][dy]=1;}}//dijstra();//SPFA();floyed();if(map[a][b]==INF) printf("-1\n");else printf("%d\n",map[a][b]);//if(dis[b]==INF) printf("-1\n");//else printf("%d\n",dis[b]); }return 0;}
0 0
- POJ 1847 - Shortest Path Dijstra>SPFA
- POJ 3268 - Shortest Path Dijstra+ SPFA
- POJ 2253 - 最短路变形 SPFA+Dijstra
- SPFA(Shortest Path Faster Algorithm)学习手记
- 什么是SPFA(Shortest Path Faster Algorithm)
- SPFA算法总结[Shortest Path Faster Algorithm]
- HDU2807The Shortest Path(SPFA或Floyd)
- hdu 1535 || poj 1511 Invitation Cards(heap + dijstra || spfa)
- POJ 3126 Prime Path SPFA
- SPFA(Shortest Path Faster Algorithm)算法实现类
- Single-source shortest path problem: SPFA vs. Dijkstra
- HDU 4725 The Shortest Path in Nya Graph priority_queue + spfa
- SPFA(Shortest Path Faster Algorithm)算法(队列优化)
- HDU 4725 The Shortest Path in Nya Graph 建图加SPFA
- 最短路-SPFA(Shortest Path Faster Algorithm)
- HDU 4871 Shortest-path tree (树分治+SPFA)
- hdu 4725 The Shortest Path in Nya Graph //spfa
- hdu4725The Shortest Path in Nya Graph---spfa求最短路
- R语言无限制显示输出行数
- 视图学习(一)
- 假装高逼格的公司都死掉了
- IOS开发中遇到Other Linker Flags参数报错的问题
- uniqueResult和list
- POJ 1847 - Shortest Path Dijstra>SPFA
- sqoop的安装与使用
- Java多线程数据隔离(ThreadLocal)
- 轻松实现水平垂直居中,不用css expression以及jq
- Android Studio解决导入项目非常慢的问题
- 中点画圆
- Java获取任意范围内的随机数
- MAC机中安装RUBY环境
- 删除多余内核