图结构练习——最短路径

Time Limit: 1000 ms            Memory Limit: 65536 KiB

Submit Statistic Discuss

Problem Description

给定一个带权无向图,求节点1到节点n的最短路径。

Input

输入包含多组数据,格式如下。

第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)

剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。

Output

每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)

Sample Input

  1. 3 2
  2. 1 2 1
  3. 1 3 1
  4. 1 0

Sample Output

  1. 1
  2. 0

Floyd算法:

  1. #include<bits/stdc++.h>
  2. #define Maxn 0x3f3f3f3f
  3. using namespace std;
  4. int Map[201][201], vis[201];
  5. int n, m;
  6. void Floyd()
  7. {
  8. for(int k = 1; k <= n; k++)
  9. {
  10. for(int i = 1; i <= n; i++)
  11. {
  12. for(int j = 1; j <= n; j++)
  13. {
  14. if(Map[i][j] > (Map[i][k] + Map[k][j]))
  15. Map[i][j] = Map[i][k] + Map[k][j];
  16. }
  17. }
  18. }
  19. }
  20. int main()
  21. {
  22. while(cin >> n >> m)
  23. {
  24. int a, b, c;
  25. for(int i = 1; i <= n; i++)
  26. {
  27. for(int j = 1; j <= n; j++)
  28. {
  29. if(i == j)
  30. Map[i][j] = 0;
  31. else
  32. Map[i][j] = Maxn;
  33. }
  34. }
  35. for(int i = 0; i < m; i++)
  36. {
  37. cin >> a >> b >> c;
  38. if(Map[a][b] > c)
  39. {
  40. Map[a][b] = Map[b][a] = c;
  41. }
  42. }
  43. Floyd();
  44. cout << Map[1][n] << endl;
  45. }
  46. return 0;
  47. }

Dijkstra算法:

  1. #include <iostream>
  2. #include <queue>
  3. #define INF 999999
  4. #define ERROR -1
  5. using namespace std;
  6. int n, m, s, d;
  7. int Map[1001][1001];
  8. int Min, i, j;
  9. int V, W;
  10. bool collected[1001];
  11. int dist[1001];
  12. int FindMinDist( )
  13. {
  14. Min = INF;
  15. for(i=1; i<=n; i++)
  16. if( !collected[i] && dist[i] < Min )
  17. {
  18. Min = dist[i];
  19. V = i;
  20. }
  21. if( Min == INF )
  22. V = ERROR;
  23. return V;
  24. }
  25. void Dijkstra( int s )
  26. {
  27. dist[s] = 0;
  28. while(1)
  29. {
  30. V = FindMinDist( );
  31. if( V == ERROR )
  32. break;
  33. collected[V] = true;
  34. for( W=1; W<=n; W++ )
  35. if( collected[W] == false && Map[V][W] < INF )
  36. {
  37. if( dist[V] + Map[V][W] < dist[W] )
  38. {
  39. dist[W] = dist[V] + Map[V][W];
  40. }
  41. }
  42. }
  43. }
  44. int main()
  45. {
  46. while(cin >> n >> m)
  47. {
  48. int a, b, c;
  49. for( i = 1; i <= n; i++)
  50. {
  51. for( j = 1; j <= n; j++)
  52. {
  53. if(i == j)
  54. Map[i][j] = 0;
  55. else
  56. Map[i][j] = INF;
  57. }
  58. }
  59. for(i=1; i<=n; i++)
  60. {
  61. dist[i] = INF;
  62. collected[i] = false;
  63. }
  64. for( i = 1; i <= m; i++ )
  65. {
  66. cin >> a >> b >> c;
  67. if(Map[a][b] > c)
  68. {
  69. Map[a][b] = Map[b][a] = c;
  70. }
  71. }
  72. Dijkstra(1);
  73. cout << dist[n] << endl;
  74. }
  75. return 0;
  76. }

关于这两种算法:最短路径 Dijkstra算法 AND Floyd算法

SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)的更多相关文章

  1. 图结构练习——最短路径(dijkstra算法(迪杰斯拉特))

      图结构练习——最短路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个带权无向图,求节点1到节点n的最短路径.   ...

  2. 图结构练习——最短路径(floyd算法(弗洛伊德))

    图结构练习——最短路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个带权无向图,求节点1到节点n的最短路径.   输 ...

  3. 数据结构与算法系列研究七——图、prim算法、dijkstra算法

    图.prim算法.dijkstra算法 1. 图的定义 图(Graph)可以简单表示为G=<V, E>,其中V称为顶点(vertex)集合,E称为边(edge)集合.图论中的图(graph ...

  4. 最短路径算法(Dijkstra算法、Floyd-Warshall算法)

    最短路径算法具体的形式包括: 确定起点的最短路径问题:即已知起始结点,求最短路径的问题.适合使用Dijkstra算法. 确定终点的最短路径问题:即已知终结结点,求最短路径的问题.在无向图中,该问题与确 ...

  5. 非负权值有向图上的单源最短路径算法之Dijkstra算法

    问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...

  6. 最短路经算法简介(Dijkstra算法,A*算法,D*算法)

    据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等.美国火星探测器核心的寻路算法就是采用的D*(D Star)算法. 最短路经计算分静态 ...

  7. 算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法

    一.名称 动态规划法应用 二.目的 1.贪婪技术的基本思想: 2.学会运用贪婪技术解决实际设计应用中碰到的问题. 三.要求 1.实现基于贪婪技术思想的Prim算法: 2.实现基于贪婪技术思想的Dijk ...

  8. 图中最短路径算法(Dijkstra算法)(转)

    1.Dijkstra 1)      适用条件&范围: a)   单源最短路径(从源点s到其它所有顶点v); b)   有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E ...

  9. 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析

    什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ...

随机推荐

  1. Mycat主从模式下的读写分离与自动切换

    1. 机器环境 192.168.2.136 mycat1 192.168.2.134 mydb1 192.168.2.135 mydb2 2在mysql1.mysql2上安装mysql 更改root用 ...

  2. springboot整合图像数据库Neo4j

    百度百科: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从 ...

  3. Vulkan Tutorial 10 图形管线

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 通过接下来的章节,我们将会开启有关图形管线的话题,通过对图 ...

  4. 201671010127 2016—2017-2 java编程中遇到的问题

    学习了Java的一些基本语法后,心里的激动无法按捺,总是比较Java与C语言语法的区别,一有闲时间就会用刚学的Java基本语法写一些简单的程序.这不,一不小心又陷入了困难,本人在此诚挚的请教各位园友, ...

  5. java基础之io流总结一:io流概述

    IO流概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.io流是实现输入和输出的基础,可以方便的实现数据的输入和输出操作. IO流的分类: 根据处理数据类型的不同分为:字符流 ...

  6. linux下rsync命令详细整理

    点评:rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一详细说明,需要了解的朋友可以参考下-在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命 ...

  7. Android Studio 编译提示 No installed build tools found. Please install the Android build tools

    添加 ANDROID_HOME=D:\Android\adt-bundle-windows\sdk 系统变量即可

  8. HighCharts SVN IReport进行PDF报表设计--模板

    BOS物流项目笔记第十五天 HIghcharts是很强大的图表绘制插件,它是基于纯js绘制的.当然地,对于图表也会有很多操作了.下面就我工作时遇到的一些比较常见的highcharts的操作进行小结,不 ...

  9. 新浪SAE高级开发者认证通过

    如题,新浪SAE高级开发者认证通过,申请的方式为提交开源项目地址,用的是如下的项目 http://jqext.sinaapp.com/ 之前该项目是部署在 mopaas 上的,在拿到高级开发者资格后迁 ...

  10. laravel的mvc