hdu1869六度分离,spfa实现求最短路
就是给一个图。假设随意两点之间的距离都不超过7则输出Yes,否则
输出No。
因为之前没写过spfa,无聊的试了一下。
大概说下我对spfa实现的理解。
因为它是bellmanford的优化。
所以之前会bf的理解起来,可能会比較easy。
它是这样子的,你弄一个队列。
先打一个起点进去。之后求出的到各点的最短路。
都是由这个点出发的。
然后開始迭代,直至队列为空。
在迭代的过程中,
首先从队列里面拿一个点出来,
然后标记一下,说明这个点不在队列里面。
然后開始枚举全部点。进行松弛化,
松弛化的过程就是看以这个拿出来的点为转折点,
枚举的其他点为终点,看有没有更好的方法
让路径变短。
假设有的话,推断那个点在不在队列中。
假设不在。
就把枚举出的那个点。拿到
队列中去。记得标记一下说明这个点已经在队列中了。
就是这样了。
代码例如以下:
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int num_dot,num_side,iq[110],weight[110],dis[110][110];
void init()
{
int i,t1,t2;
memset(dis,127,sizeof(dis));
for(i=0;i<num_side;i++)
{
scanf("%d%d",&t1,&t2);
dis[t1][t2]=1;
dis[t2][t1]=1;
}
}
void spfa(int st)
{
int x,i;
queue<int>qq;
memset(iq,0,sizeof(iq));
memset(weight,127,sizeof(weight));
iq[st]=1;
qq.push(st);
weight[st]=0;
while(qq.size())
{
x=qq.front();
qq.pop();
iq[x]=0;
for(i=0;i<num_dot;i++)
if(weight[i]>weight[x]+dis[x][i])
{
weight[i]=weight[x]+dis[x][i];
if(!iq[i])
{
qq.push(i);
iq[i]=1;
}
}
}
}
bool isright()
{
int i,j;
for(i=0;i<num_dot;i++)
{
spfa(i);
for(j=i+1;j<num_dot;j++)
if(weight[j]>7)
return 0;
}
return 1;
}
int main()
{
while(scanf("%d%d",&num_dot,&num_side)!=EOF)
{init();
if(isright())
printf("Yes\n");
else
printf("No\n");}
}
hdu1869六度分离,spfa实现求最短路的更多相关文章
- 基于bellman-ford算法使用队列优化的spfa求最短路O(m),最坏O(n*m)
acwing851-spfa求最短路 #include<iostream> #include<cstring> #include<algorithm> #inclu ...
- ACM - 最短路 - AcWing 851 spfa求最短路
AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法 ...
- spfa求次短路
思路:先算出每个点到1的最短路d1[i],记录下路径,然后枚举最短路上的边 删掉之后再求一遍最短路,那么这时的最短路就可能是答案. 但是这个做法是错误的,可以被卡掉. 比如根据下面的例题生成的一个数据 ...
- HDU 1688 Sightseeing&HDU 3191 How Many Paths Are There(Dijkstra变形求次短路条数)
Sightseeing Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- COJ 0579 4020求次短路的长度
4020求次短路的长度 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在一个地图上共有N个路口(编号分别为1到N),R条道路( ...
- spfa 单源最短路究极算法
学习博客链接:SPFA 求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm. SPFA算法是西南交通大学段凡丁于1994年发表的. 从名字我 ...
- hdu 3760(2次bfs求最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3760 思路:首先是建反图,从点n开始做spfa求出n到各点的最短路,然后从1点开始搜最小序列,对于边( ...
- 关于dijkstra求最短路(模板)
嗯.... dijkstra是求最短路的一种算法(废话,思维含量较低, 并且时间复杂度较为稳定,为O(n^2), 但是注意:!!!! 不能处理边权为负的情况(但SPFA可以 ...
- 分层图 (可以选择K条路的权为0,求最短路)
分层图可以处理从图中选取k条边使其边权变为0,求最短路 Description 在你的强力援助下,PCY 成功完成了之前的所有任务,他觉得,现在正是出去浪的大好时光.于是,他来到高速公路上,找到一辆摩 ...
随机推荐
- ntohs, ntohl, htons,htonl的比较和详解
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数 ...
- 手把手教你修改pcduino系统默认的音频输出
最近要搞个小玩意儿,要用到pcduino的音频输出,但是系统默认的是输出到hdmi的音频,我的显示器上没有喇叭,只能搞个USB声卡.但是系统默认又不是输出到USB,这里我手把手叫你怎么设置系统默认声卡 ...
- C#对HTTP数据还原
使用C#对HTTP数据还原 [创建时间:2016-05-12 00:19:00] NetAnalyzer下载地址 在NetAnalyzer2016中加入了一个HTTP分析功能,很过用户对此都很感兴 ...
- DataSnap起源于MIDAS(十几篇博客)
作为MIDAS起始于Delphi3,Delphi4是MIDAS II,Delphi5中是MIDASIII,而后基于COM远程数据模块方式使用TCP/IP,HTTP,(D)COM构建出强大的通讯能力.从 ...
- Open Source RTOS
http://www.osrtos.com/ Name License Platforms Description Last updated FreeRTOS Modified GPL MSP ...
- oracle存储过程、声明变量、for循环(转)
oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out ty ...
- mvc action 有多种跳转
在ASP.NET mvc下,action 有多种跳转方式: return RedirectToAction("Index");//一个参数时在本Controller下 如果Redi ...
- 【剑指offer】不用加减乘除做加法
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27966641 题目描写叙述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.* ...
- What is the difference between JRE,JVM and JDK?
If you are a Java developer, it is very often that you think about understanding the JRE,JVM and JDK ...
- android画笔错位问题的解决
下面的画画板的代码: public class MainActivity extends Activity { private ImageView iv; private Bitmap baseBit ...