hdu 2544 最短路(SPFA算法)
本题链接:点击打开链接
本题大意:
首先输入一个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 0x3f3f3f3f
using 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;
}
hdu 2544 最短路(SPFA算法)的更多相关文章
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- HDOJ/HDU 2544 最短路---dijkstra算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 这题的思路可以见这里(同一类型):http://blog.csdn.net/xiaozhuaix ...
- hdu 2544 最短路 (spfa)
最短路 Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- HDU 2544 最短路 SPFA 邻接表 模板
Problem Description 在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt.可是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以如今他们想 ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2544最短路 (迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others) Me ...
- hdu 2544 最短路
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shi ...
- hdu 2544最短路——最短路的初次总结 UESTC 6th Programming Contest Online
这是一道标准的模板题,所以拿来作为这一段时间学习最短路的总结题目. 题意很简单: 有多组输入数据,每组的第一行为两个整数n, m.表示共有n个节点,m条边. 接下来有m行,每行三个整数a, b, c. ...
随机推荐
- spring mvc 配置运行报错误
四月 06, 2015 10:51:18 上午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Ap ...
- 整合Activiti Modeler到业务系统(或BPM平台)
http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html 1. 为什么要整合 Activiti 5.10版本把 ...
- leetcode_378. Kth Smallest Element in a Sorted Matrix_堆的应用
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- C/S模型:TCP,UDP构建客户端和服务器端(BIO实现
Java中提供了socket编程来构建客户端和服务器端 TCP构建服务器端的步骤:(1)bind:绑定端口号(2)listen:监听客户端的连接请求(3)accept:返回和客户端连接的实例(4)re ...
- chfn - 改变你的finger讯息
总览 SYNOPSIS chfn [ -f full-name ] [ -o office ] [ -p office-phone ] [ -h home-phone ] [ -u ] [ -v ] ...
- splice用法解析
splice()方法算是最强大的数组方法了,它有很多种用法,主要用于删除指定位置的数组项,在指定的位置插入数组项,在指定位置替换数组项,slpice()方法始终都会返回一个数组,该数组包括从原始数组中 ...
- CAD使用GetxDataDouble读数据(com接口)
主要用到函数说明: MxDrawEntity::GetxDataDouble2 读取一个Double扩展数据,详细说明如下: 参数 说明 [in] LONG lItem 该值所在位置 [out, re ...
- vue工程化与路由router
一.介绍 vue.js 是 目前 最火的前端框架,vue.js 兼具 angular.js 和 react.js 的优点,并剔除它们的缺点.并且提供了很多的周边配套工具 如vue-router ...
- 关闭警告&关闭eslint
1.main.js中添加 vue.config.productiontip = false 这样即可去除警告! 第一个除了那个配置意外,还需要将 NODE_ENV 设置为 production 参 ...
- django显示图片
dirctory vickey_django vickey(projectname) vickey __init__.py __pycache__ settings.py urls.py wsgi.p ...