1. 程式人生 > >模板題(最短路Dijkstra演算法)

模板題(最短路Dijkstra演算法)

#include<bits/stdc++.h>
#define inf 1e9

using namespace std;

int mmap[105][105];
int dis[105];// 記錄某個點到vis集合的最短路
int vis[105];//vis記錄某個點是否已經包含在已找到最短路的集合中


int main()
{
    int n,m;//n個路口;m條邊

    while(cin>>n>>m&&(n+m))
    {
       memset(vis,0,sizeof(vis));
       int a,b,c;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
               mmap[i][j]=inf;
        fill(dis+1,dis+n+1,inf);

        for(int i=1; i<=m; i++)
        {
            cin>>a>>b>>c;
            mmap[a][b]=mmap[b][a]=c;
        }

        vis[1]=1;
        for(int i=1; i<=n; i++)
            dis[i]=mmap[1][i];

        while(1)
        {
            int mmin=inf;
            int nextin=0;//不存在0號路口

            for(int i=1; i<=n; i++)
            {
                if(vis[i]==0&&dis[i]<mmin)
                {
                    mmin=dis[i];
                    nextin=i;
                }
            }

            if(nextin==0)
            {
                break;   //沒有下一個nextin點,說明所以點都找到了自己的最短路
            }

            vis[nextin]=1;//把nextin加入已找到最短路的點的集合

            //加入nextin後,更新dis陣列
            for(int i=1; i<=n; i++)
            {
                if(dis[nextin]+mmap[nextin][i]<dis[i])
                    dis[i]=dis[nextin]+mmap[nextin][i];
            }
        }
        cout<<dis[n]<<endl;
    }
}

相關推薦

模板短路Dijkstra演算法

#include<bits/stdc++.h> #define inf 1e9 using namespace std; int mmap[105][105]; int dis[105];// 記錄某個點到vis集合的最短路 int vis[105];

【POJ - 3255】Roadblocks短路 Dijkstra演算法

Roadblocks 直接翻譯了 Descriptions Bessie搬到了一個新的農場,有時候他會回去看他的老朋友。但是他不想很快的回去,他喜歡欣賞沿途的風景,所以他會選擇次短路,因為她知道一定有一條次短路。這個鄉村有R(1<=R<=100000)條雙向道路,每一條連線N(1<=N

藍書演算法競賽進階指南記錄——POJ3613 Cow Replays短路+矩陣乘法

題目:POJ3613. 題目大意:給出一張圖,然你求出經過N條邊後,S到T的最短路. 這道題一開始覺得挺容易的,用f[i][j]表示從起點到點i經過j的最短路,不斷更新就可以了. 但是突然發現數據巨大根本跑不過去... 然後就開始看書上的題解了... 書上居然要用矩陣乘法,好

藍書演算法競賽進階指南記錄——CH0602 黑暗城堡短路樹計數

題目大意:給出一張圖,求這張圖不同最短路樹的形態.期中最短路樹指的是對於任意一個點i,樹上1到i的路徑長度等於圖上1到i的最短路徑長度的生成樹. 我們發現這棵生成樹必須滿足的條件其實就是以1為根,1到任意一個點的路徑長度要是原圖的一條最短路. 我們用dis[i]表示原

短路dijkstra演算法詳解:dijkstra圖解

本人小白,如果有寫的不恰當的地方,還請大家指出,共同進步學習。 ---------------------------------------------------------------------------------------------------------

複習圖論--短路--Dijkstra演算法

定義:迪傑斯特拉演算法是由荷蘭電腦科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉演算法。是從一個頂點到其餘各頂點的最短路徑演算法,解決的是有向圖中最短路徑問題。迪傑斯特拉演算法主要特點是以起始

訓練指南 UVA - 11374短路Dijkstra + 記錄路徑 + 模板

edge n-1 code ase 最短 ios 就是 swap gets layout: post title: 訓練指南 UVA - 11374(最短路Dijkstra + 記錄路徑 + 模板) author: "luowentaoaa" cata

牛客國慶集訓派對Day3 I多源多匯短路dijkstra變種

Metropolis 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 524288K,其他語言1048576K 64bit IO Format: %lld 題目描述 魔方國有n座城市,編號為。城市之間通過n-1條無向道路連線,形成一個樹形結構。 在若

HDU2544——短路短路Dijkstra

題意描述:A,B為路口編號,C為AB之間的權值,計算最短路 /*Dijstra相對於Floyd效率還是高了很多的,它的主題思想為 從源點出發,找距離它最短的一個點,再以這個點為跳板,找離跳板最近的點 當不能繼續進行時,再次回到源點,找第二小的點,重複操作,直到所有的點

find the safest road短路dijkstra

XX星球有很多城市,每個城市之間有一條或多條飛行通道,但是並不是所有的路都是很安全的,每一條路有一個安全係數s,s是在 0 和 1 間的實數(包括0,1),一條從u 到 v 的通道P 的安全度為Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上

Silver Cow Party短路 + Dijkstra + 鄰接表 + 優先佇列

Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11348 Accepted: 5077 Description One cow from each of N farms (1 ≤ N 

訓練指南 UVA - 10917短路Dijkstra + 基礎DP

多次 i++ 記憶化 上一條 是否 而且 false 點列 type layout: post title: 訓練指南 UVA - 10917(最短路Dijkstra + 基礎DP) author: "luowentaoaa" catalog: tru

訓練指南 UVALive - 4080短路Dijkstra + 邊修改 + 短路

連通 列表 struct tle 枚舉 有用 tin ++ pro layout: post title: 訓練指南 UVALive - 4080(最短路Dijkstra + 邊修改 + 最短路樹) author: "luowentaoaa" cata

HDU-2433 Travel短路[Dijkstra]

Travel Time Limit: 10000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description       One day, Tom tra

New Game! 短路+建圖

std fab pre lse quest map n) 位置 str New Game! https://www.nowcoder.com/acm/contest/201/L 題目描述 Eagle Jump公司正在開發一款新的遊戲。Hifumi Takimoto作為其中

訪問短路+搜尋剪枝

2247: 訪問(deliver) 題目描述 給你一個n個頂點的鄰接矩陣(圖),以及每個頂點的訪問時限,要求從頂點1開始,尋找一個訪問序列,要求在每個頂點的訪問時限之前訪問,且每個頂點的訪問時間之和最小 輸入 第一行一個數n,2&l

POJ2387 Til the Cows Come Home【短路 Dijkstra演算法

Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 76034

HDU - 2112 HDU Today短路 dijkstra)

題目連結 題意:找兩個城市之間的最短路,沒有就輸出-1; 簡單題,把城市轉成數字做就行,但有坑點:起點和終點可以相同;   #include <iostream> #include <cstdio> #include <string> #

Gym - 101986F Pizza Delivery 短路必經路徑

  題意:給你一個有向圖,每一條邊在第i天都會反向,問反向後的最短路是否有變化。每次反向都是獨立的。   解題思路:我們先把起點到所有點的最短路求出來,然後把所有邊反向,然後求終點到所有點的最短路。 這樣我們就記錄了兩個陣列d1,d2,分別記錄起點和終點

HDU-1548 A strange lift短路[Spfa || BFS]

題目連結: http://acm.hdu.edu.cn/showproblem.php?pid=1548 參考部落格: https://blog.csdn.net/idealism_xxm/article/details/47625691 BFS: //BFS #include