SPFA 最短路径打印方法

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std;
#define INF 0xfffffff
#define maxn 40

struct Edge
{
    int e, w;
    Edge(int e=0,int w=0) : e(e), w(w) {}
};
int Path[maxn], n, dist[maxn];
bool vis[maxn];
vector<Edge> G[maxn];

void Spfa(int Star,int End)
{
    Edge P, Pn;
    dist[Star] = 0;
    queue<Edge> Q;
    Q.push(Edge(Star,0));

    while( !Q.empty() )
    {
        P = Q.front();
        Q.pop();
        vis[P.e] = true;

        int len = G[P.e].size();

        for(int i=0; i<len; i++)
        {
            Pn = G[P.e][i];

            if(dist[Pn.e] > dist[P.e] + Pn.w)
            {
                dist[Pn.e] = dist[P.e] + Pn.w;
                Path[Pn.e] = P.e;
                if( !vis[Pn.e] )
                {
                    Q.push(Pn);
                    vis[Pn.e] = true;
                }
            }
        }
    }
}

void PutPath(int Star,int End)
{
    if(Star == End)
    {
        printf("%d", Star);
        return ;
    }

    PutPath(Star, Path[End]);

    printf("---->%d", End);
}
void Init()
{
    for(int i=1; i<=n; i++)
    {
        G[i].clear();
        dist[i] = INF;
        vis[i] = false;
        Path[i] = i;
    }
}

int main()
{
    int m;
    cin >> n >> m;

    Init();

    for(int i=1; i<=m; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        G[a].push_back(Edge(b,c));
    }

    Spfa(1, n);

    printf("%d\n", dist[n]);

    PutPath(1,n);

    return 0;
}
/*
4 3
1 2 1
2 3 1
3 4 1
*/
时间: 2024-10-15 04:14:39

SPFA 最短路径打印方法的相关文章

js打印方法总结

前段时间做web项目用到了页面打印,在网上找了些资料,自己也试了很多方法,将这些方案列出下: 1.window.print()方法打印,所有主要浏览器都支持 print() 方法 这个方法很实用,只需要调用方法就可以打印,但是这是打印整个html,要想打印局部的话,要另做. 2.想要局部打印,通过jQuery插件就可以实现,现在网上有很多这样的插件,比如jqprint插件等等,可以非常方便的打印一个div,而且不会影响其他的.ie和谷歌是没问题的,其他没仔细测过. 3.想要局部打印,也可以通过一

Swift中自定义打印方法

// 1.获取打印所在的文件 let file = ( #file as NSString).lastPathComponent // 2.获取打印所在的方法 let funcName = #function // 3.获取打印所在的行数 let line = #line Swift自定义的打印方法:

数据结构:可以用求最短路径的方法思想求最长路径么?给出详细解答。。

数据结构:可以用求最短路径的方法思想求最长路径么?为什么呢? 这里求解最短路径的通用方法有Dijkstra算法和Floyd-Warshall算法,Dijkstra算法不允许边的权值为负,也不允许有回路,而Floyd-Warshall算法可以允许边的权值为负,但不允许负值边构成回路,即可以求解有回路的图 它们都有局限,这两种算法的思想可以用来求最长路径么?? 为什么 不可以? (感谢给我答案的好心人:来自于知乎:http://www.zhihu.com/question/27201255和CSDN

DebugLog 打印方法执行时间

DebugLog 打印方法执行时间 用于方便调试性能问题的打印插件.给访法加上@DebugLog,就能输出该方法的调用参数,以及执行时间. Project gradle配置 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() mavenCentral() } depende

DevExpress Winform 通用控件打印方法(允许可自定义边距) z

DevExpress Winform 通用控件打印方法,包括gridcontrol,treelist,pivotGridControl,ChartControl,LayoutControl...(所有支持打印功能的控件) ,同时允许用户自定义报表标题,报表纸张类型(A4,A3...),报表边距 /// <summary> /// 打印功能 /// </summary> /// <param name="panel">打印控件</param>

Swift 自定义打印方法

#代码如下 // MARK:- 自定义打印方法 func MLLog<T>(_ message : T, file : String = #file, funcName : String = #function, lineNum : Int = #line) { #if DEBUG // 创建一个日期格式器 let dformatter = DateFormatter() // 为日期格式器设置格式字符串 dformatter.dateFormat = "yyyy-MM-dd HH:

poj 3259Wormholes (spfa最短路径)

#include<stdio.h> #include<string.h> #include<limits.h> #include<queue> using namespace std; #define N 5505 #define M 55000//注意边和点集的数组大小 struct edge { int to,value,next; }edges[M]; int heads[N],len=0; int addedge(int u,int v,int w)

浏览器打印方法总结

1. 关于打印,浏览器有自带的打印方法,但是有个问题就是它只能打印整个页面.如果需要打印局部会比较麻烦.具体实现方法可以看下面代码: function doPrint() { bodyHtml = window.document.body.innerHTML; sPrintStr = "<!--startprint-->"; //开始打印标识字符串有17个字符 ePrintStr = "<!--endprint-->"; //结束打印标识字符

DevExpress Winform 通用控件打印方法(允许可自定义边距)

DevExpress Winform 通用控件打印方法,包括gridcontrol,treelist,pivotGridControl,ChartControl,LayoutControl...(所有支持打印功能的控件) ,同时允许用户自定义报表标题,报表纸张类型(A4,A3...),报表边距 /// <summary>         /// 打印功能         /// </summary>         /// <param name="panel&qu