• 最短路 dijkstra算法


    题目

    给定n个点的带权有向图,求从1到n的路径中边权之和最小的路径。

    dijkstra实现方法

    用dist[i]表示i这个点到原点的最短距离,一开始初始化为无穷大,然后将原点设为0。

    用ok[i]表示i这个点是否已经确定了最短路,一开始将原点设为已经找到。

    然后每一次枚举每一个点,找到与原点最近且没有找到最短路的点,将它标记为已经找到最短路,再用这个点去更新其他的点,最终即可求得最短路。

    代码

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 int n,m;
     5 int dist[1005];
     6 bool ok[1005];
     7 int ma[1005][1005];
     8 int main(){
     9     cin>>n>>m;
    10     memset(ma,0x3f,sizeof(ma));//先设置为无穷大 
    11     for(int i=1;i<=m;i++){    //读入 
    12         int a,b,c;
    13         cin>>a>>b>>c;
    14         ma[a][b]=c;
    15         ma[b][a]=c;
    16     }
    17     memset(dist,0x3f,sizeof(dist));//将到每一个点的最短路设置为无穷大 
    18     dist[1]=0;
    19     for(int i=1;i<=n;i++){            //主要步骤 
    20         int mmm,minn=0x3f3f3f;
    21         for(int j=1;j<=n;j++){
    22             if(!ok[j]&&dist[j]<minn){
    23                 minn=dist[j];
    24                 mmm=j;
    25             }
    26         }
    27         ok[mmm]=1;
    28         for(int k=1;k<=n;k++){
    29             dist[k]=min(dist[k],dist[mmm]+ma[mmm][k]);
    30         }
    31     }
    32     cout<<dist[n];
    33     return 0;
    34 } 
  • 相关阅读:
    [写代码]处理一组lrc歌词文件
    [ubuntu]windows重装以后,恢复grub引导
    [HDOJ1878]欧拉回路
    [写代码]解析自定义数据库文件的思路
    [写代码]wordList——百词斩CLI版
    [HDOJ2544]最短路
    [HDOJ1285] 确定比赛名次
    [HDOJ1232]畅通工程
    [HDOJ2717]Catch That Cow
    jQuery实现点击开关图片切换
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/10920297.html
Copyright © 2020-2023  润新知