DIJKSTRA 临接表

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <cstdlib>
 7 using namespace std;
 8 int value[10010],to[10010],next[10010];
 9 int head[10010],total;
10 int book[10010];
11 int dis[10010];
12 int n,m;
13 void adl(int a,int b,int c)
14 {
15     total++;
16     to[total]=b;
17     value[total]=c;
18     next[total]=head[a];
19     head[a]=total;
20 }
21 void dijkstra(int u)
22 {
23     memset(dis,88,sizeof(dis));
24     memset(book,0,sizeof(book));
25     dis[u]=0;
26     for(int i=1;i<=n;i++)
27     {
28         int start=-1;
29         for(int j=1;j<=n;j++)
30             if(book[j]==0 && (dis[start]>dis[j] || start==-1))
31                 start=j;
32         book[start]=1;
33         for(int e=head[start];e;e=next[e])
34             dis[to[e]]=min(dis[to[e]],dis[start]+value[e]);
35     }
36 }
37 int main()
38 {
39     cin>>n>>m;
40     for(int i=1;i<=m;i++)
41     {
42         int a,b,c;
43         cin>>a>>b>>c;
44         adl(a,b,c);
45      }
46      dijkstra(1);
47      for(int i=1;i<=n;i++)
48          cout<<dis[i]<<" ";
49 }

时间: 2024-10-22 07:56:26

DIJKSTRA 临接表的相关文章

ACM:最短路,dijkstra,邻接表的建立,使用邻接表跟优先队列的dijkstra,Bellman-Ford,Floyd。。

(一)dijkstra,邻接矩阵 所有边权均为正,不管有没有环,求单个源点出发,到所有节点的最短路.该方法同时适用于有向图和无向图. #include <iostream> #include <string> #include <stack> using namespace std; const int MAXN = 1000; const int INF = 100000000; int n, m; int maze[MAXN][MAXN], vis[MAXN], d

最短路模板集.

最短路dijkstra算法 邻接矩阵模板 复杂度 V^2 #include <iostream> #include <cstring> #include <algorithm> const int INF=0x3f3f3f3f; const int MAXN=10000; int n,s; int dist[MAXN]; int cost[MAXN][MAXN]; bool vis[MAXN]; void dijkstra(int s) { memset(vis,0,s

HDU-2112-最短路(map)

HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14031    Accepted Submission(s): 3279 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候

邻接表实现Dijkstra算法以及DFS与BFS算法

//============================================================================ // Name : ListDijkstra.cpp // Author : fffff // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //==========================

POJ 2387 Til the Cows Come Home dijkstra算法 用邻接表和邻接矩阵

题目如下: Til the Cows Come Home Time Limit: 1000MS        Memory Limit: 65536K Total Submissions: 27726        Accepted: 9353 Description Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wa

POJ3159 Dijkstra+邻接表+优先队列

今天学习到了一种新姿势,用邻接表+优先队列优化Dijkstra,这样时间复杂度就由O(N^2+E)变为O(NlogN+E),妈妈再也不用担心我超时了!~\(^o^)/ Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 25077   Accepted: 6810 Description During the kindergarten days, flymouse was the monitor of his

【HDU 1874 2544 2066 2112】 Dijkstra单源最短路径专题 —— 优先队列+邻接表/邻接矩阵

HDU 1874  畅通工程续 解题报告: 由于顶点(城镇)的数目只有200个,所以可以采用邻接矩阵的形式来存储,代码会更简洁些,也不容易出错.但是处于练习的目的,采用邻接表+优先队列的方式实现,优先队列使用STL中的priority_queue.很基础的单源单汇最短路径. HDU 2544  最短路 解题报告: 基本和1874是一样的,只是数据量小了,并且要求当n==0 && m==0时终止,值得注意!这道题同时也保证了一定是可达的,所以输出时可以直接输出. HDU 2066  一个人的

Dijkstra[两种邻接表+优先队列优化]

Dijksta算法中,如果我们采用的是邻接矩阵来存的,第一点浪费的空间比较多,第二点我们知道算法的时间复杂度在O(n*n),这样的算法可以说并不是很好,所以我们考虑优化它首先我们可以优化存储结构,采用邻接表来存储,其次我们可以用优先队列来排序大小,其时间复杂度大大降低. 需要注意的是pair是按照第一个元素的大小排序,如果相同才按照第二个,所以我们要把d[i]包装在第一个元素上. vector实现邻接表+优先队列 (假设边一开始是字符型的,这么假设是为了加点难度) #include<iostre

hrbust1339 Touring (Dijkstra最短路径)(邻接表)

本文出自:http://blog.csdn.net/svitter 题意:两个人从c出发,分别想去a,b旅行,两个城市之间只有一条路,有一个相应的价值.求最小的价值.通行的时候只花费一个价值. 本题目的关键在于优先队列,求出a, b, c到各点的最小价值,然后从中挑选一个点作为分开的点. dijktra算法时用邻接表存储,因为明显是稀疏图..还有就是存边的时候记得存双向的边,利用优先队列弹出最小的花费.使用邻接表记得初始化node[i] = -1(可以用memset) AC: //=======