SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)
图结构练习——最短路径
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
给定一个带权无向图,求节点1到节点n的最短路径。
Input
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
Output
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
Sample Input
3 2
1 2 1
1 3 1
1 0
Sample Output
1
0
Floyd算法:
#include<bits/stdc++.h>
#define Maxn 0x3f3f3f3f
using namespace std;
int Map[201][201], vis[201];
int n, m;
void Floyd()
{
    for(int k = 1; k <= n; k++)
    {
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(Map[i][j] > (Map[i][k] + Map[k][j]))
                    Map[i][j] = Map[i][k] + Map[k][j];
            }
        }
    }
}
int main()
{
    while(cin >> n >> m)
    {
        int a, b, c;
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(i == j)
                    Map[i][j] = 0;
                else
                    Map[i][j] = Maxn;
            }
        }
        for(int i = 0; i < m; i++)
        {
            cin >> a >> b >> c;
            if(Map[a][b] > c)
            {
                Map[a][b] = Map[b][a] = c;
            }
        }
        Floyd();
        cout << Map[1][n] << endl;
    }
    return 0;
}
Dijkstra算法:
#include <iostream>
#include <queue>
#define INF 999999
#define ERROR -1
using namespace std;
int n, m, s, d;
int Map[1001][1001];
int Min, i, j;
int V, W;
bool collected[1001];
int dist[1001];
int FindMinDist( )
{
    Min = INF;
    for(i=1; i<=n; i++)
        if( !collected[i] && dist[i] < Min )
        {
            Min = dist[i];
            V = i;
        }
    if( Min == INF )
        V = ERROR;
    return V;
}
void Dijkstra( int s )
{
    dist[s] = 0;
    while(1)
    {
        V = FindMinDist( );
        if( V == ERROR )
            break;
        collected[V] = true;
        for( W=1; W<=n; W++ )
            if( collected[W] == false && Map[V][W] < INF )
            {
                if( dist[V] + Map[V][W] < dist[W] )
                {
                    dist[W]  = dist[V]  + Map[V][W];
                }
            }
    }
}
int main()
{
    while(cin >> n >> m)
    {
        int a, b, c;
        for( i = 1; i <= n; i++)
        {
            for( j = 1; j <= n; j++)
            {
                if(i == j)
                    Map[i][j] = 0;
                else
                    Map[i][j] = INF;
            }
        }
        for(i=1; i<=n; i++)
        {
            dist[i] = INF;
            collected[i] = false;
        }
        for( i = 1; i <= m; i++ )
        {
            cin >> a >> b >> c;
            if(Map[a][b] > c)
            {
                Map[a][b] = Map[b][a] = c;
            }
        }
        Dijkstra(1);
        cout << dist[n] << endl;
    }
    return 0;
}
关于这两种算法:最短路径 Dijkstra算法 AND Floyd算法
SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)的更多相关文章
- 图结构练习——最短路径(dijkstra算法(迪杰斯拉特))
		图结构练习——最短路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个带权无向图,求节点1到节点n的最短路径. ... 
- 图结构练习——最短路径(floyd算法(弗洛伊德))
		图结构练习——最短路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个带权无向图,求节点1到节点n的最短路径. 输 ... 
- 数据结构与算法系列研究七——图、prim算法、dijkstra算法
		图.prim算法.dijkstra算法 1. 图的定义 图(Graph)可以简单表示为G=<V, E>,其中V称为顶点(vertex)集合,E称为边(edge)集合.图论中的图(graph ... 
- 最短路径算法(Dijkstra算法、Floyd-Warshall算法)
		最短路径算法具体的形式包括: 确定起点的最短路径问题:即已知起始结点,求最短路径的问题.适合使用Dijkstra算法. 确定终点的最短路径问题:即已知终结结点,求最短路径的问题.在无向图中,该问题与确 ... 
- 非负权值有向图上的单源最短路径算法之Dijkstra算法
		问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ... 
- 最短路经算法简介(Dijkstra算法,A*算法,D*算法)
		据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等.美国火星探测器核心的寻路算法就是采用的D*(D Star)算法. 最短路经计算分静态 ... 
- 算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
		一.名称 动态规划法应用 二.目的 1.贪婪技术的基本思想: 2.学会运用贪婪技术解决实际设计应用中碰到的问题. 三.要求 1.实现基于贪婪技术思想的Prim算法: 2.实现基于贪婪技术思想的Dijk ... 
- 图中最短路径算法(Dijkstra算法)(转)
		1.Dijkstra 1) 适用条件&范围: a) 单源最短路径(从源点s到其它所有顶点v); b) 有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E ... 
- 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析
		什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ... 
随机推荐
- windows 进程监控 Procmon.exe
			windows 进程监控 Procmon.exe window下一个程序打开太慢,可以用此程序监控.在哪一步慢了,读取文件还是注册表. ProcessMonitor3.2 Process Monito ... 
- MySQL 示例数据库sakila-db的安装
			最近在看 “高性能MySql”这本神书,发现上面很多例子采用的官方示例数据库sakila. 官方示例数据库 下载地址 http://dev.mysql.com/doc/index-other.html ... 
- elastic(10) 基本查询
			# 指定index名以及type名的搜索 GET /library/books/_search?q=title:elasticsearch # 指定index名没有type名的搜索 GET /libr ... 
- 关于FPGA设计16位乘法器的两…
			原文地址:关于FPGA设计16位乘法器的两种算法作者:ChrisChan 部分原代码如下: 用特权的右移算法虽复杂点,但节省不少LEs,如下图: 用左移算法尽管浅显易懂,但因每次都会从最右端移位,会占 ... 
- 6410在rvds下编译启动代码报错分析
			contains invalid call from '~PRES8' function to 'REQ8' function main RVDS编译出现contains invalid call f ... 
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial—5.6 向量化 Vectorization
			5.6 向量化 Vectorization 参考视频: 5 - 6 - Vectorization (14 min).mkv 下面是向量化的小例子,如果将所有u(j) .所有v(j).所有w(j)都看 ... 
- 360 安全卫士 for Linux 使用结果
			测试了一把,结果显示360基本对Linux社区规范和安全常识不give a fuck. 胡乱打包 首先,这个deb包就是胡乱打包,依赖关系就没弄好: $ dpkg-deb -I 360safeforl ... 
- Free GIS Software
			Refer to There are lots of free gis software listed in the website: http://www.freegis.org/ http://w ... 
- CF 1091E New Year and the Factorisation Collaboration
			昨晚Good Bye 2018D题没做出来,车翻大了…… 官方题解 传送门 初赛知识:一个无向图所有顶点度数之和为偶数.然而这东西还有一个高端的名字:Handshaking lemma 但是 ... 
- (转)基于 WPF + Modern UI 的 公司OA小助手 开发总结
			原文地址:http://www.cnblogs.com/rainlam163/p/3365181.html 前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个 ... 
