1. 程式人生 > >最短路徑(Dijkstra模板)

最短路徑(Dijkstra模板)

打一個dj的模板,方便以後查閱

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
const int MAX=1e9;
int n,m;
int a[1005][1005];//圖
int lowcost[1005];
int vis[1005];
void dj(int s)
{
    for(int i=1;i<=n;i++)//3.初始化每個點到指定點的最短路徑
    {
        lowcost[i]=a[i][s];
    }
    memset(vis,0,sizeof vis);
    vis[s]=1;
    for(int i=1;i<n;i++)//4.依次選出最短路徑的點,總共n-1個,迴圈n的話也沒關係
    {
        int MIN,min_index;
        MIN=MAX;
        min_index=i;
        for(int j=1;j<=n;j++)//4.1找出最短路徑的點以及下標
        {
            if(MIN>lowcost[j] && !vis[j])
            {
                MIN=lowcost[j];
                min_index=j;
            }
        }
        vis[min_index]=1;
        for(int k=1;k<=n;k++)//4.2更新一下每個點到指定點的最短距離
            if(lowcost[k]>lowcost[min_index]+a[min_index][k] && !vis[k])
                lowcost[k]=lowcost[min_index]+a[min_index][k];
    }
}

int main()
{
    while(scanf("%d%d",&n,&m)==2)
    {
        for(int i=1;i<=n;i++)//0.初始化矩陣
            for(int j=1;j<=n;j++)
                {a[i][j]=i==j?0:MAX;}
        int x,y,val;
        for(int i=0; i<m; i++)//1.構造鄰接矩陣
        {
            scanf("%d%d%d",&x,&y,&val);
            a[x][y]=a[y][x]=val;
        }
        dj(2);
        //5.到各個點的最短路徑存在lowcost中
        for(int i=1;i<=n;i++)
            printf("%d \n",lowcost[i]);


    }
    return 0;
}

相關推薦

路徑Dijkstra模板

打一個dj的模板,方便以後查閱 #include <iostream> #include <cstdio> #include <cstring> using na

圖結構練習——路徑Dijkstra演算法

think: 1注意重複邊的覆蓋 2注意map陣列的初始化 3注意dist陣列的初始化 圖結構練習——最短路徑 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 給定一個

【ACM】帶權有向圖單源路徑Dijkstra演算法

最短路徑的第一類問題 求從單個源點到其餘各頂點的最短路徑。這是一種貪心策略,不可以存在負權邊。 演算法簡介 給定帶權有向圖G和源點v0,求從源點v0到G中其餘各頂點的最短路徑。迪傑斯特拉演算法是對

[模板]單源路徑Dijkstra

。。 str using while isdigit etc strong sin inline 如題,給出一個有向圖,請輸出從某一點出發到所有點的最短路徑長度。 主要還是再打一遍最短路,這種算法我用的不多。。。 1 #include<bits/std

#dijkstra+zkw線段樹#洛谷 4779 洛谷 1339 【模板】單源路徑標準版熱浪

分析 首先為什麼要說這種方法呢,因為根據模板,zkw線段樹優化比STL堆快了一倍,所以說在此推薦我的熱浪題解 程式碼 #include <cstdio> #include <cctype> #include <algorithm> #

luogu P4779 【模板】單源路徑標準版

-o2 struct call 哈哈 poi fun fin hole char 線段樹優化dij 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 我可能是個智障 // luogu-judger-enable-o2 #pragma GCC diagnostic error "-

[短路/線段樹大法優化DIJ] 【模板】單源路徑標準版

洛谷原題 這題我自己看了STL優先佇列後試了試優化DIJ演算法,但我這個菜比只有32分... 還是老老實實用線段樹吧! 自己寫的程式,反正AC了,線段樹大法好! 具體見程式碼 #include<bits/stdc++.h> using namespace std; long lon

求圖中兩點路徑dijkstra go實現

import ( "testing" "strconv" "fmt" ) // V - S = T type Dijkstra struct { Visit bool // 表示是否訪問 Val int // 表示距離 Path string // 路徑的顯示 }

單源路徑Dijkstra——貪心演算法

  Dijkstra演算法是解單源最短路徑問題的貪心演算法。其基本思想是,設定頂點集合點集合S並不斷地做貪心選擇來擴充這個集合。一個頂點屬於集合S當且僅當從源到該頂點的最短路徑長度已知。初始時,S中僅含有源。設u是G的其一頂點。把從源到u且中間只經過S中頂點的路稱為從源到u的特殊

題解 P3371 【模板】單源路徑弱化版

一個story: 2018.10.3,晚上,在與我校是競爭關係的學校的機房(去一起集訓)訓練。 我:(頹) 對方教練:(走過來) 我:(趕快開始假裝研究SPFA) 對方教練:這是?最短路? 我:是啊是啊(瘋狂掩飾尷尬) 對方:這是SPFA? 我:是啊是啊(瘋狂掩

SDUT 2622 路徑Dijkstra

點我看題目 題意 :中文不詳述。 思路 :因為這個題加了一個要求就是路徑數目得是x的倍數。所以在原來演算法的一維dis陣列增加到二維,用來存走的路徑數%x。也可以用spfa做。 #include <stdio.h> #include <string.h> #inclu

資料結構-基於鄰接矩陣實現圖的遍歷視覺化及使用Floyd、Dijkstra演算法求解路徑JavaScript實現

使用 JavaScript 基於鄰接矩陣實現了圖的深度、廣度遍歷,以及 Floyd、Dijkstra 演算法求解最短路徑。另外使用 SVG 實現圖的遍歷視覺化。一、輸入首先,輸入資料主要有兩個,一個是存放節點名的陣列,另一個是存放邊物件的陣列。例如://存放圖結點的陣列 va

LG4779 【模板】單源路徑標準版

題意 給定一個 \(N\) 個點,\(M\) 條有向邊的帶非負權圖,請你計算從 \(S\) 出發,到每個點的距離。 資料保證你能從 \(S\) 出發到任意點。 \(1≤N≤100000\); \(1≤M≤200000\); 分析 可以斐波那契堆。 程式碼 #include<iostrea

HDU 2544路徑 SPFA 演算法模板

F - 最短路 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit

資料結構——帶權有向圖路徑演算法Dijkstra演算法

Dijkstra演算法是由荷蘭電腦科學家艾茲格·迪科斯徹發現的。演算法解決的是有向圖中最短路徑問題。 舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離。 Dijkstra演算法可以用來找到兩個城市之間的最短路徑。 Dijkstra演算法的輸入包含了一個有權重的有向圖G,以及G中的一個

資料結構-基於鄰接表實現圖的遍歷視覺化及使用Floyd、Dijkstra演算法求解路徑JavaScript實現

使用 JavaScript 基於鄰接表實現了圖的深度、廣度遍歷,以及 Floyd、Dijkstra 演算法求解最短路徑。另外使用 SVG 實現圖的遍歷視覺化。<!DOCTYPE html> <html lang="en"> <head>

洛谷 P4779 【模板】單源路徑標準版 題解

題目來源: 題目描述: 題目背景 狗哥做爛了最短路,突然機智的考了Bosh一道,沒想到把Bosh考住了...你能幫Bosh解決嗎? 他會給你100000000000000000000000000000000000%10金幣w 題目描述 給定n個點的帶權有向

路徑Dijkstra and Floyd

看了一個下午的資料才明白迪傑斯特拉演算法,關鍵是網上的好多解釋太拗口了。弗洛伊達好明白。 迪傑斯特演算法主要思想就是把頂點分為兩組,一組是求出最短路徑的,另一組是沒求出的(第二組)。然後選擇從源點到第

圖結構練習——路徑Dijkstra

圖結構練習——最短路徑 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description  給定一個帶權無向圖,求節點1到節點n的最短路徑。 Input  輸入包含多組資料,格式如下。 第一行包

P3371 【模板】單源路徑弱化版

pre urn mes enable 路徑 gdi name div int // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<algorit