zoukankan      html  css  js  c++  java
  • 最短路 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 } 
  • 相关阅读:
    资料下载
    sublime安装AngularJS插件
    Zen Coding: 一种快速编写HTML/CSS代码的方法[Emmet]
    手机号码归属地API
    浅谈JavaScript中的作用域
    原生ajax、jsoup
    Java排序:选择排序
    Java排序:冒泡排序
    Oracle系列一、基本术语
    linux jdk tomcat 安装
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/10920297.html
Copyright © 2011-2022 走看看