博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1869六度分离,spfa实现求最短路
阅读量:7213 次
发布时间:2019-06-29

本文共 1025 字,大约阅读时间需要 3 分钟。

就是给一个图。假设随意两点之间的距离都不超过7则输出Yes,否则
输出No。

因为之前没写过spfa,无聊的试了一下。
大概说下我对spfa实现的理解。
因为它是bellmanford的优化。
所以之前会bf的理解起来,可能会比較easy。
它是这样子的,你弄一个队列。
先打一个起点进去。之后求出的到各点的最短路。
都是由这个点出发的。

然后開始迭代,直至队列为空。
在迭代的过程中,
首先从队列里面拿一个点出来,
然后标记一下,说明这个点不在队列里面。
然后開始枚举全部点。进行松弛化,
松弛化的过程就是看以这个拿出来的点为转折点,
枚举的其他点为终点,看有没有更好的方法
让路径变短。
假设有的话,推断那个点在不在队列中。
假设不在。
就把枚举出的那个点。拿到
队列中去。记得标记一下说明这个点已经在队列中了。

就是这样了。
代码例如以下:

#include
#include
#include
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
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
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
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");}}

转载地址:http://eruym.baihongyu.com/

你可能感兴趣的文章
JNI开发系列②.h头文件分析
查看>>
使用JDBC向SQL Server中传递表类型参数
查看>>
android animation
查看>>
自动扫描Properties文件配置的简单实现
查看>>
Java agent技术原理文档
查看>>
一些linux命令总结。
查看>>
hibernate中session类save方法返回的是什么
查看>>
maven注册本地 jIKAnalyzer3.2.8.jar
查看>>
Linux3.6.7在OK6410下的移植
查看>>
死锁与银行家算法
查看>>
c的启动与存储空间布局
查看>>
#SORA#celery研究笔记
查看>>
Java 线程池
查看>>
互联网常用场景下的大数据架构解析——转自InfoQ
查看>>
Storm中的Executor
查看>>
iOS网络 Reachability检测联网状态
查看>>
基于gradle构建spring boot
查看>>
9999二进制 及 x=x&(x-1)问题
查看>>
model中的rules方法
查看>>
关于PHP的 header() 函数
查看>>