Dijkstra 模板 最短路

來源:互聯網
上載者:User

標籤:dijkstra   模板   

轉載請註明出處:http://blog.csdn.net/u012860063?viewmode=contents


模板奉上:

#include <cstdio>#include <iostream>#include <algorithm>#define MAX 100#define INF 1000000000using namespace std;int dijkstra (int mat[][MAX],int n, int s,int f){//s為起點, f:為終點int dis[MAX];//記錄到任意點的最短距離int mark[MAX];//記錄被選中的結點 int i,j,k = 0;for(i = 0 ; i < n ; i++)//初始化所有結點,每個結點都沒有被選中 mark[i] = 0;    for(i = 0 ; i < n ; i++)//將每個結點到start結點weight記錄為當前distance     {        dis[i] = mat[s][i];        //path[i] = s;    }    mark[s] = 1;//start結點被選中     //path[s] = 0;    dis[s] = 0;//將start結點的的距離設定為0     int min ;//設定最短的距離。     for(i = 1 ; i < n; i++)    {        min = INF;        for(j = 0 ; j < n;j++)        {            if(mark[j] == 0  && dis[j] < min)//未被選中的結點中,距離最短的被選中             {                min = dis[j] ;                k = j;            }        }        mark[k] = 1;//標記為被選中         for(j = 0 ; j < n ; j++)        {            if( mark[j] == 0  && (dis[j] > (dis[k] + mat[k][j])))//修改剩餘結點的最短距離             {                dis[j] = dis[k] + mat[k][j];            }        }    }    return dis[f];    } int mat[MAX][MAX];int main(){    int n,m;    while(scanf("%d %d",&n,&m))    {        int a,b,dis;        if(n == 0 || m == 0)            break;        int i,j;        for(i = 0 ; i < n;i++)            for(j = 0 ; j < n; j++)                mat[i][j] = INF;for(i = 0 ; i < m ;i++){scanf("%d %d %d",&a,&b,&dis);--a,--b;if(dis < mat[a][b] || dis < mat[b][a])mat[a][b] = mat[b][a] = dis;}int ans = dijkstra(mat,n,0,n-1);printf("%d\n",ans);    }return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.