码迷,mamicode.com
首页 > 编程语言 > 详细

(邻接表)最短路径算法

时间:2020-03-30 16:32:11      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:names   输入   思想   输出   邻接表   clu   cst   i++   string   

Dijktra算法:

思想:找到距离原点最近的一个顶点,然后以该点为中心进行扩展,最终得到源点到其余各点的最短路径。

缺点:无法解决带负边的图论问题。

输入样例:

6 9 1 (6个点 9条边 起点为1)
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4

输出样例:

0 1 8 4 13 17 (源点到各点的最短距离)

#include <cstdio>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <math.h>
#include <vector>
using namespace std;
const int inf=999999;//0x7fffff
const long long mod=1e9+7;
const double PI=acos(-1);

int n,m;
int ans=9999999;
bool vis[105];
int dis[105];

struct node{
    int u;
    int w;
    node(int uu,int ww){
        u=uu;
        w=ww;
    }
};
vector<node> v[105]; 
void Dijkstra(int s){                        //Dijkstra算法为单源最短路径算法 s 为起点 
    memset(dis,inf,sizeof(dis));             //dis数组表示起点 s 到每个点的最小路径 
    vis[s]=1;
    dis[s]=0;  
    for(int i=0;i<v[s].size();i++){         //初始dis最短路径表 
        node no = v[s][i];
        dis[no.u]=no.w;
    }
    
    int min,minp;
    for(int i=1;i<=n;i++){                 //遍历dis数组的每一个最短路径 
        min=inf;
        for(int j=1;j<=n;j++){
            if(!vis[j]&&dis[j]<min){       //寻找并记录此时dis表的最短路径的值和距离 
                min=dis[j];
                minp=j;
            }
        }
        vis[minp]=1;
        for(int u=0;u<v[minp].size();u++){ //寻找此时最短路径的点可到的点 并更新该点的最短路径 
            node no=v[minp][u]; 
            if(!vis[no.u]&&dis[no.u]>dis[minp]+no.w){
                dis[no.u]=dis[minp]+no.w;
            }
        }
    }
}
int main()
{
    int x,y,value,s;
    cin>>n>>m>>s;
    for(int i=1;i<=n;i++){
        dis[i]=inf;
    }
    for(int i=0;i<m;i++){
        cin>>x>>y>>value;
        v[x].push_back(node(y,value));
    }
    Dijkstra(s);                        //s 为起点 
    for(int i=1;i<=n;i++){              //输出s 到各个点的最短路径 
        cout<<dis[i]<<" ";
    }
    return 0;
}

 

(邻接表)最短路径算法

标签:names   输入   思想   输出   邻接表   clu   cst   i++   string   

原文地址:https://www.cnblogs.com/xusi/p/12598826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!