zoukankan      html  css  js  c++  java
  • Dijkstra 复习

    Dijkstra 算法不仅是求图中最短路径的O(N²)算法

    在关于图的动态规划中可以将题目转换为图,再用该算法进行DP

    代码如下

    #include<iostream>  // made by Huing
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int c[10001],f[1001][1001],n,m,s,t;
    bool exist[10001],b[10001];
    void Dijkstra(int s)
    {
     memset(b,false,sizeof(b));
     b[s]=true;
     c[s]=0;
     for (int i=1;i<=n;i++) c[i]=f[s][i];//初始化
     
     for (int i=1;i<+n-1;i++)

     {
      int k=0,minl=1e30;
      for (int j=1;j<=n;j++)
      if(!b[j]&&c[j]<minl){
       k=j;minl=c[j];
      }
      if(k==0) break;
      b[k]=true;
      for (int j=1;j<=n;j++)
      c[j]=min(c[j],c[k]+f[k][j]); 
     }
     cout<<c[t];
    }
    int main()
    {
     cin>>n>>s>>t;                //求s到t的最短路径


     memset(f,-0x7fffffff/3,sizeof(f));
        for (int i=1;i<=n;i++)
     for (int j=1;j<=n;j++)
     cin>>f[i][j];
     Dijkstra(s);
    }

  • 相关阅读:
    进制间转换的理论和实现不同
    操作DOM
    浏览器对象
    浏览器
    面向对象编程——class继承
    面向对象编程——原型继承
    js面向对象编程——创建对象
    JS面向对象编程
    js的JSON
    js标准对象——Date
  • 原文地址:https://www.cnblogs.com/ffhy/p/5658223.html
Copyright © 2011-2022 走看看