P103 单源最短路问题 第三种Dijkstra算法

///通过队列,找出最小的dis[]值,取出配对的vertex值。

/// stack priority_queue set
struct edge
{
    int to;
    int cost;

}
;
vector <edge>G[MZX_V];///表
typedef pair<int ,int > Pa;///Pa.second是点的编号 Pa.first是到该点的最短距离
int dis[MAX_V];

void Dijkstra( )
{

    priority_queue< Pa,vector<Pa>,greater<Pa> >que;
    ///que中的元素是按照第一个元素的大小从小至大的顺序排列的

    ///之前初始化的 d

    dis[s]=0;
    que.push(Pa(0,s));

    while(!que.empty()) ///que空的时候empty返回的是true
    {
        Pa pa=que.top();
        que.pop();

        int temp1=pa.second();
        if(dis[temp1]<pa.first) continue;///剪枝
        for(int i=0;i<G[temp1].size();++i)
        {
            edge e=G[temp1][i];
            if(dis[ e.to ]<pa.first+e.cost)
        {
            dis[e.to]=pa.first+e.cost;
           que.push(Pa(dis[e.to],e.to));
        }
        }

    }
}
时间: 2025-01-14 07:57:12

P103 单源最短路问题 第三种Dijkstra算法的相关文章

P103 Dijkstra算法 单源最短路问题优化算法

///标准的dijkstra算法 void dijkstra() { while(true) { int vert=-1; dis[-1]=INF; for(int i=0;i<num_v;i++) { if( (!used[i]) && ( vert==-1||dis[i]<dis[vert] ) ) {vert=i;} } if(vert==-1) break;///这里要提前break;好像是这样... used[vert]=1; for(int i=0;i<num

P100 单源最短路问题 Bellman-Ford 算法

///单源最短路问题 ///DAG:单向不循环图 ///问题的特殊性:要对变进行遍历,而不是顶点 const int MAX_V=; const int MAX_E=; const int INF=; int num_v; int num_e; int start; int aim; struct edge { int from; int to; int cost; }; edge G[MAX_E]; int dis[MAX_V]; void min_path(int start) { for(

编程算法 - 单源最短路问题 Bellman-Ford 代码(C)

单源最短路问题 Bellman-Ford 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 单源最短路: 固定一个起点, 求它到其他所有点的最短路的问题. Bellman-Ford: 设当前到顶点i的最短路长度为d[i], 并设初值d[s]=0, d[i]=INF, 再不断使用递推关系式d[e.to] = d[e.from] + e.cost更新d的值. 时间复杂度: O(V*E) 代码: /* * CppPrimer.cpp * * Created

django获取单表数据的三种方式

django获取单表数据的三种方式 v1 = models.Business.objects.all() # QuerySet ,内部元素都是对象 v2 = models.Business.objects.all().values('id','caption') # QuerySet ,内部元素都是字典 v3 = models.Business.objects.all().values_list('id','caption') # QuerySet ,内部元素都是元组 def business(

执行LS源码的三种方法

方法一:使用 eval() eval()函数常用来计算表达式,将表达式转换成一个变量名或者对象名,然后使用它访问变量或者对象. LS中的数据都是以字符串的形式存储.当获取到字符串 data时(json数据转换成的字符串), storage = eval("("+data+")");//这样得到的数据就是json串. 备注:在json转换成本地存储的时候,需要将json串转换一下:JSON.stringify(data),这样得到的就是json串.. 方法二:使用ne

HDU - 2544 - 最短路 (最基础单源最短路问题!!dijkstra+floyd+SPFA)

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 34617    Accepted Submission(s): 15001 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找

单源最短路问题 dijkstra算法 总结

Dijkstra(迪杰斯特拉)算法,用于计算一个节点到其他所有节点的最短路径.要注意的是这个算法中路径的权值不能有负边,如果有负边的话要运用bellman ford算法. 学习了一下dijkstra算法,感觉跟最小生成树的Prim算法有点类似.感觉dijkstra也是一个贪心的策略,用集合S表示的是已经找出最小路径的点,用dis[]来表示每个点当前距离源点的最短距离.再用一个数组来存储两点之间的距离,对于没有直接相连的两点就将值赋为INF. 1.一开始的时候,集合S中只有源点. 2.选取尚未被找

使用单例时的三种单例写法

单例:一个类只有一个实例,在外部创建对象时,不能用alloc.(只要alloc,就会在堆区开辟空间,就意味着有多个对象)所以我们要提供一个创建对象的方法: 1.加号方法 2.返回值类型为当前类 3.方法名以default ,standared,main,shared等开头 + 当前类名 下面以Person类为例 在.h文件中声明 + (Person *)sharePerson; 在.m文件实现 第一种模式(单线程使用这种模式) + (Person *)sharePerson { 声明为stati

单源最短路问题 bellman-ford算法

贴一个链接将最短路问题的:http://www.cnblogs.com/Yan-C/p/3916281.html Bellman-Ford算法寻找单源最短路径的时间复杂度为O(V*E). 这个算法是基于动态规划的思想.也就是利用现在的最小路径去更新其他路径的最小距离. 有个要点就是要对边进行松弛操作,其实就是更新路径吧~ 用dis数组来存储这个点到起点的最小距离.用一个struct来存储每一条边的信息. 算法步骤: 1.对图进行初始化,dis[]=INF , dis[s] = 0;s表示起点.