HDUOJ --2544最短路(基础)
输入保证至少存在1条商店到赛场的路线。
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
2
代码:基于数组(时间复杂度为O(n^2))
- #include<stdio.h>
- #include<string.h>
- const int inf=0x3f3f3f3f ;
- int path[];
- int sta[][],lowcost[];
- void Dijkstra( int cost[][], int n )
- {
- int i,j,min;
- int vis[]={};
- for(i=; i<n ; i++)
- {
- lowcost[i]=cost[][i];
- path[i]=;
- }
- lowcost[]=;
- path[]=-;
- int pre= ;
- for( i= ; i<n ;i++)
- {
- min=inf;
- for(j= ; j<n ;j++)
- {
- if(vis[j]==&&lowcost[pre]+cost[pre][j]<lowcost[j])
- {
- lowcost[j]=lowcost[pre]+cost[pre][j];
- path[j]=pre;
- }
- }
- for(j=; j<n ;j++)
- {
- if(vis[j]==&&lowcost[j]<min)
- {
- min=lowcost[j];
- pre=j;
- }
- }
- vis[pre]=;
- }
- printf("%d\n",lowcost[n-]);
- }
- int main()
- {
- int n,m,x,y,val,i,j;
- while(scanf("%d%d",&n,&m),n+m)
- {
- for(i=;i<n;i++)
- {
- for(j=;j<n;j++)
- {
- sta[i][j]=inf;
- }
- }
- while(m--)
- {
- scanf("%d%d%d",&x,&y,&val);
- sta[y-][x-]=sta[x-][y-]=val;
- }
- Dijkstra(sta,n);
- }
- return ;
- }
采用以为数组,时间复杂度将为O(n*long(n));
代码:
- #include<iostream>
- #include<stdlib.h>
- #include<stdio.h>
- #include<string.h>
- #include<queue>
- using namespace std;
- const int inf=0x3f3f3f3f;
- const int tol=;
- const int edg=;
- int cost[edg],dist[tol]; /* <distance> */
- int e,pnt[edg],nxt[edg],prev[tol],head[tol],vis[tol];
- struct qnode{
- int v ,c;
- qnode(int vv= ,int cc=):v(vv),c(cc){};
- bool operator <(const qnode& r)const
- {
- return c>r.c;
- }
- };
- void Dijkstra(int n , const int src) /* <src出发点> */
- {
- qnode mv ; //充当一个临时变量
- int i,j,k,pre;
- priority_queue<qnode>que ; /*<priority—>优先队列>*/
- vis[src]=;
- dist[src]=;
- que.push( qnode(src,) );
- for( pre=src,i=; i<n; i++)
- {
- for(j=head[pre] ; j!=- ;j=nxt[j])
- {
- k=pnt[j];
- if(vis[k]==&&dist[pre]+cost[j]<dist[k])
- {
- dist[k]=dist[pre]+cost[j];
- que.push( qnode(pnt[j], dist[k]) );
- prev[k]=pre;
- }
- }
- while(!que.empty() && vis[que.top().v]==)
- {
- que.pop();
- }
- if(que.empty())break;
- mv=que.top();
- que.pop();
- pre=mv.v;
- vis[pre]=;
- }
- }
- inline void addedge( int u ,int v,int c)
- {
- pnt[e]=v;
- cost[e]=c;
- nxt[e]=head[u];
- head[u]=e++;
- }
- void init(int nv ,int ne)
- {
- int i,u,v;
- int c;
- e=;
- memset(head,-,sizeof(head));
- memset(vis,,sizeof(vis));
- memset(prev,-,sizeof(prev));
- for(i=; i<nv ; i++)
- dist[i]=inf;
- for(i=; i<ne ;i++)
- {
- scanf("%d%d%d",&u,&v,&c);
- addedge(u-,v-,c);
- addedge(v-,u-,c);
- }
- }
- int main()
- {
- int n,m;
- while(scanf("%d%d",&n,&m),n+m)
- {
- init(n,m);
- Dijkstra(n,);
- printf("%d\n",dist[n-]);
- }
- return ;
- }
HDUOJ --2544最短路(基础)的更多相关文章
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- hdu 2544 最短路
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shi ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2544最短路 (迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others) Me ...
- HUD.2544 最短路 (Dijkstra)
HUD.2544 最短路 (Dijkstra) 题意分析 1表示起点,n表示起点(或者颠倒过来也可以) 建立无向图 从n或者1跑dij即可. 代码总览 #include <bits/stdc++ ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- hdu 2544 最短路 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...
- hdoj 2544 最短路
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2544 分析:Dijkstra算法 //2013-10-30 10:01:25 Accepted 254 ...
- hdu 2544最短路——最短路的初次总结 UESTC 6th Programming Contest Online
这是一道标准的模板题,所以拿来作为这一段时间学习最短路的总结题目. 题意很简单: 有多组输入数据,每组的第一行为两个整数n, m.表示共有n个节点,m条边. 接下来有m行,每行三个整数a, b, c. ...
随机推荐
- Unity3d-Particle System 5.x系统的学习(四)
Unity3d-Particle System 5.x系统的学习(四) 今天,我们来聊聊unity5.x的粒子系统和unity4.x粒子系统的区别. 我大致看了下,区别还是蛮多的,但是总体的粒子制作思 ...
- MICS:副本和纠删码混合存储系统
摘要 云存储系统的三个指标: 高可靠性,低存储开销,高读写性能. 这三个指标是没有办法同一时候满足的,许多时候须要进行tradeoff. 副本系统和纠删码是两种在存储系统中广泛使用的策略,它们在保证高 ...
- 深入理解Java中的组合和继承
Java是一个面向对象的语言.每一个学习过Java的人都知道,封装.继承.多态是面向对象的三个特征.每个人在刚刚学习继承的时候都会或多或少的有这样一个印象:继承可以帮助我实现类的复用.所以,很多开发人 ...
- OpenCV学习(30) 轮廓defects
上一篇教程中,我们学习了如何计算轮廓的凸包,其实对一个轮廓而言,可能它的凸包和它本身是重合的,也有可能不是重合的.比如下面左边图像的轮廓本身就是凸包,而右边图像的轮廓则不是.我们可以通过函数bool ...
- 数学图形之克莱因瓶(klein bottle)
克莱因瓶是一种内外两面在同一个曲面上的图形. 在数学领域中,克莱因瓶(德语:Kleinsche Flasche)是指一种无定向性的平面,比如二维平面,就没有“内部”和“外部”之分.克莱因瓶最初的概念提 ...
- UVA 400 (13.08.05)
Unix ls The computer company you work for is introducing a brand new computer line and is developi ...
- TypeError: 'newline' is an invalid keyword argument for this function 错误解决
出错代码: outputFile = open('output1.csv', 'w', newline='') # error line outputWriter = csv.writer(outpu ...
- BZOJ 3172 Tjoi2013 单词 后缀数组
题目大意:给定一个n个单词的文章,求每一个单词在文章中的出现次数 文章长度<=10^6(不是单词长度<=10^6,不然读入直接超时) 首先将全部单词用空格连接成一个字符串.记录每一个单词的 ...
- 一段遍历4X4表格,取出每个单元格内容组合成文本的JS代码
遍历表格的JS容易忘,留个随笔以备忘. var tableData=""; var table=document.getElementById("XXTableId ...
- ZH奶酪:PHP判断图片格式的7种方法
以图片 $imgurl = "http://www.php10086.com/wp-content/themes/inove/img/readers.gif"; 为例: 思路1. ...