hdu 2544 最短路(SPFA算法)
来源:互联网 发布:阿里云域名解析 速度 编辑:程序博客网 时间:2024/05/16 06:57
本题链接:点击打开链接
本题大意:
首先输入一个n,m。代表有n个点,m条边。然后输入m条边,每条边输入两个点及边权。1为起点,n为终点。输入两个零表示结束。
解题思路:
本题可以使用SPFA算法来做,此算法与dijkstra算法的区别在于,此算法可以计算边权为负值的情况。使用此算法首先需要用邻接表建图,用dis数组存放当前点距起点的最短权值之和,用mark数组标记已使用过的点,SPFA算法过程与广度优先搜索相似,此代码与BFS的区别在于已经标记的点,在再次取出来的时候要取消标记。本题AC代码如下:
#include<stdio.h>#include<string.h>#include<queue>#define MAXN 110#define MAXM 20200#define INF 0x3f3f3f3fusing namespace std;int head[MAXN];int mark[MAXN];int dis[MAXN];int num;struct node{int from;int to;int val;int next;};node edge[MAXM];void getmap(int u,int v,int w){node e={u,v,w,head[u]};edge[num]=e;head[u]=num++;}void SPFA(int s){memset(mark,0,sizeof(mark));memset(dis,INF,sizeof(dis));queue<int>q;q.push(s);dis[s]=0;mark[s]=1;while(!q.empty()){int top=q.front();q.pop();mark[top]=0;for(int i=head[top];i!=-1;i=edge[i].next){int u=edge[i].to;if(dis[u]>dis[top]+edge[i].val){dis[u]=dis[top]+edge[i].val;if(!mark[u]){mark[u]=1;q.push(u);}}}}}int main(){int n,m;while(scanf("%d%d",&n,&m),n||m){memset(head,-1,sizeof(head));num=0;for(int i=0;i<m;i++){int a,b,d;scanf("%d%d%d",&a,&b,&d);getmap(a,b,d);getmap(b,a,d);}SPFA(1);printf("%d\n",dis[n]);}return 0;}
0 0
- hdu 2544 最短路(SPFA算法)
- HDU 2544 最短路 <SPFA算法>
- HDU 2544-最短路(最短路spfa)
- HDU 2544 最短路(最短路/spfa)
- hdu 2544 最短路(最短路spfa)
- HDU 2544 最短路 (Dijkstra || SPFA)
- hdu 2544 最短路(dijkstra||spfa)
- hdu-2544-最短路(SPFA)
- HDU 2544 最短路(Spfa)
- HDU 2544 最短路(spfa详解)
- HDU 2544 最短路【Dijkstra算法、spfa算法】
- hdu 2544 最短路(spfa)
- Spfa 最短路 HDU 2544
- hdu 2544 最短路-spfa
- hdu 2544 最短路 spfa
- HDU 2544 最短路 (SPFA)
- HDU 2544 最短路【SPFA】
- HDU 2544 最短路 SPFA
- 增量学习
- 创建基于本地协议的git服务器
- 第七讲:用户界面 View(三)
- 手势
- Linux Malloc分析-从用户空间到内核空间
- hdu 2544 最短路(SPFA算法)
- ios UIButton的图片和文字位置
- Fragment和viewpager结合去网络获取图片
- 面试题收集2
- eclipse 安装spring IDE插件
- JQuery中$.ajax()方法参数详解
- C/C++的内存分配
- 二叉树已知先序遍历和中序遍历得到后序遍历
- 最短路【SPFA】算法模板