点击进入例题   最短路     

我知道的有三种方法 1 : 深搜 每次  每次有更小的路径时  就更新   ,   2 :   Dijkstra    3 : floyd

前两种   是  单源 最短路径    ,     如果是 求 单源最短路径的话  就用前面的 两种   ,   但是 如果求的是 多源最短路径的话 最好是还用  floyd   时间复杂度 相对较低    .  用floyd 求单源最短路径的话 ....   时间复杂度 搞那么一点点 不过 程序实现简单 ,

1 : floyd 的 实现方法 

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std;
#define INF 99999999
int main()
{
int e[][];
int n,m,a,b,c,i,j,k;
while(~scanf("%d %d",&n,&m)&&n!=&&m!=)
{
for(i=;i<=n;i++) // 将 各个边 初始化 为 最大值
for(j=;j<=n;j++)
e[i][j]=INF;
while(m--)
{
scanf("%d%d%d",&a,&b,&c); // 确定边 和 边长
e[b][a]=e[a][b]=c;
}
for(k=;k<=n;k++) //Floyd核心算法...
{
for(i=;i<=n;i++) // 所有的 路 都让 k 加进去试试
{
for(j=;j<=n;j++) //如果 从 i到j的路上 有k 走的会更轻松的话 , 那就让 k 去吧
{
if(e[i][j]>e[i][k]+e[k][j]) // 判断 是否会 更加轻松
e[i][j]=e[i][k]+e[k][j];
}
}
} printf("%d\n",e[][n]);
}
}

2 : 深搜完成   .    ( 超时 ..... 数据处理应该是没有问题的   )

 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std;
#define INF 99999999
int n,m,a[][],result;
vector<int>v[];
void DFS(int star,int dis)
{
if(dis>=result)
return;
if(star==n)
{
result=result>dis?dis:result;
return ;
}
for(int i=;i<v[star].size();i++)
{
if(a[star][v[star][i]]!=INF)
{
int w=a[star][v[star][i]];
a[star][v[star][i]]=INF;
a[v[star][i]][star]=INF;
DFS(v[star][i],w+dis);
a[star][v[star][i]]=w;
a[v[star][i]][star]=w;
}
}
}
int main()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
a[i][j]=INF;
while(scanf("%d%d",&n,&m),(m||m))
{
result=INF;
for(int i=;i<m;i++)
{
int d,b,c;
scanf("%d%d%d",&d,&b,&c);
v[d].push_back(b);
v[b].push_back(d);
a[d][b]=c;
a[b][d]=c;
}
DFS(,); // 从 1 到 n .
printf("%d\n",result);
}
}

3 : Dijkstra   ( 也就这一个比较有意思一点  )   < 归根结底 所有的算法 都是 模拟  ... >

 #include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define N 0x1f1f1f1f
int w[][];
int d[];
int ans,vis[];
int n,m;
void Dij() // Dijkstra
{
int i,j,k,v,tmp;
memset(vis,,sizeof(vis));
for(i=;i<=n;i++) // 图 中 每个节点 和 1 的距离 不是直接相邻的 就是 正无穷
d[i]=w[][i];
d[]=;
vis[]=;
for(i=;i<=n;i++)
{
tmp=N;
for(j=;j<=n;j++)
{
if(tmp>d[j]&&!vis[j]) // 从中 找到一个 和 1 最近的点 ( 这就是 怪姥姥讲的 已经有的 确定集合了吧 )
{
tmp=d[j];
v=j; // 记录下来 那一个端点的 标号
}
}
vis[v]=; // 最短的 端点 假如集合 , 标记为 已经在 集合以内
for(k=;k<=n;k++)
{
if(!vis[k]) // 将所有 集合之外 但是 和 集合之中 最少一个元素相连的元素 的长度 算一下
d[k]=min(d[k],d[v]+w[v][k]); // 但是 不让他们加进去 一会 在上面 检查一个最小的 假如已经确定长度的 集合之中
}
}
}
int main()
{
printf("%d",N);
while(~scanf("%d%d",&n,&m))
{
if(n==&&m==)break;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
w[i][j]=0x1f1f1f1f;
}
}
for(int i=;i<m;i++)
{
int a,b,dis;
scanf("%d%d%d",&a,&b,&dis);
if(w[a][b]>dis)
w[a][b]=w[b][a]=dis;
}
Dij();
printf("%d\n",d[n]);
}
}

3最短路的几种解法 ------例题< 最短路 >的更多相关文章

  1. [LeetCode] Remove Element (三种解法)

    Given an array and a value, remove all instances of that value in place and return the new length. T ...

  2. codewars.DNA题目几种解法分析(字符串替换)

    题干: 意思就是字符串替换,"A"与"C"配对,"T"与"G"配对,DNA不为空. 解法一:我的解法,用for循环遍历字 ...

  3. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

  4. LeetCode算法题-Number Complement(Java实现-五种解法)

    这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...

  5. LeetCode算法题-Third Maximum Number(Java实现-四种解法)

    这是悦乐书的第222次更新,第235篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第89题(顺位题号是414).给定非空的整数数组,返回此数组中的第三个最大数字.如果不存 ...

  6. LeetCode算法题-Longest Palindrome(五种解法)

    这是悦乐书的第220次更新,第232篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第87题(顺位题号是409).给定一个由小写或大写字母组成的字符串,找到可以用这些字母构 ...

  7. LeetCode算法题-Find the Difference(Java实现-五种解法)

    这是悦乐书的第214次更新,第227篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第82题(顺位题号是389).给定两个字符串s和t,它们只包含小写字母.字符串t由随机混 ...

  8. LeetCode算法题-Valid Perfect Square(Java实现-四种解法)

    这是悦乐书的第209次更新,第221篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367).给定正整数num,写一个函数,如果num是一个完美的正方形 ...

  9. LeetCode算法题-Intersection of Two Arrays(Java实现-四种解法)

    这是悦乐书的第207次更新,第219篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第75题(顺位题号是349).给定两个数组,编写一个函数来计算它们的交集.例如: 输入: ...

随机推荐

  1. Network----轮询

    轮询: 定时每隔多长时间刷新一次,但是,7X24的对服务器的压力会过大,因为在夜间或者是流量低峰期时,他还要持续工作. 客户端发一次请求,服务器就要相应一次. 长轮询: 和轮询的模式不同,长轮询是一次 ...

  2. 使用JdbcTemplate和JdbcDaoSupport

    [Spring对JDBC的支持] [JDBCTemplate简介] 1.为了是JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架. 2.作为Sprin ...

  3. pyhthon第一个小脚本——文件备份

    先说说这个脚本的作用:对指定路径的文件进行压缩备份到另一个指定的路径,并且压缩文件的文件名用当时的日期+时间命名. 先是对着<简明Python教程>上的代码敲的,一堆错误,书上给的是lin ...

  4. 0213Zabbix通过percona监控MySQL

    因为Zabbix自带的MySQL监控没有提供可以直接使用的Key,所以一般不采用,业界的同学们都使用Percona Monitoring Plugins 监控 MySQL的方式 Percona介绍 P ...

  5. 通过代码学习python之@property,@staticmethod,@classmethod

    URL: https://www.the5fire.com/python-property-staticmethod-classmethod.html #coding=utf-8 class MyCl ...

  6. kuangbin专题最短路 D - Silver Cow Party

    #include<iostream> #include<cstring> #include<algorithm> #include<iomanip> # ...

  7. 常见mysql的数据迁移

    1.处理把A表中的部分列复制到B表中主要处理同一库. UPDATE T_EVENT EVE, T_IPMAP MAP SET EVE.c_staff_code = MAP.c_staff_code, ...

  8. 大家好 这个事我的BLOG 站点 欢迎大家 訪问和公布文章技术的 和评论 交流技术使用

    地址 http://microlmj.gotoip3.com/blog/article!showAllArticleForPageTest.action ssh+mysql+java+tomcat+b ...

  9. [Vue-rx] Disable Buttons While Data is Loading with RxJS and Vue.js

    Streams give you the power to handle a "pending" state where you've made a request for dat ...

  10. android 请求网络异步载入

    /** * 封装ProecssDialog对话框 * */ public class LoadDialog extends ProgressDialog { private String title ...