HDUOJ --2544最短路(基础)
时间:2022-05-05
本文章向大家介绍HDUOJ --2544最短路(基础),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。 输入保证至少存在1条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
Sample Output
3 2
Source
UESTC 6th Programming Contest Online
代码:基于数组(时间复杂度为O(n^2))
1 #include<stdio.h>
2 #include<string.h>
3 const int inf=0x3f3f3f3f ;
4 int path[101];
5 int sta[101][101],lowcost[101];
6 void Dijkstra( int cost[][101], int n )
7 {
8 int i,j,min;
9 int vis[101]={1};
10 for(i=0; i<n ; i++)
11 {
12 lowcost[i]=cost[0][i];
13 path[i]=0;
14 }
15 lowcost[0]=0;
16 path[0]=-1;
17 int pre= 0;
18 for( i=1 ; i<n ;i++)
19 {
20 min=inf;
21 for(j=0 ; j<n ;j++)
22 {
23 if(vis[j]==0&&lowcost[pre]+cost[pre][j]<lowcost[j])
24 {
25 lowcost[j]=lowcost[pre]+cost[pre][j];
26 path[j]=pre;
27 }
28 }
29 for(j=0; j<n ;j++)
30 {
31 if(vis[j]==0&&lowcost[j]<min)
32 {
33 min=lowcost[j];
34 pre=j;
35 }
36 }
37 vis[pre]=1;
38 }
39 printf("%dn",lowcost[n-1]);
40 }
41
42 int main()
43 {
44 int n,m,x,y,val,i,j;
45 while(scanf("%d%d",&n,&m),n+m)
46 {
47 for(i=0;i<n;i++)
48 {
49 for(j=0;j<n;j++)
50 {
51 sta[i][j]=inf;
52 }
53 }
54 while(m--)
55 {
56 scanf("%d%d%d",&x,&y,&val);
57 sta[y-1][x-1]=sta[x-1][y-1]=val;
58 }
59 Dijkstra(sta,n);
60 }
61 return 0;
62 }
采用以为数组,时间复杂度将为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=101;
const int edg=10001;
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=0 ,int cc=0):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]=1;
dist[src]=0;
que.push( qnode(src,0) );
for( pre=src,i=1; i<n; i++)
{
for(j=head[pre] ; j!=-1 ;j=nxt[j])
{
k=pnt[j];
if(vis[k]==0&&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]==1)
{
que.pop();
}
if(que.empty())break;
mv=que.top();
que.pop();
pre=mv.v;
vis[pre]=1;
}
}
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=0;
memset(head,-1,sizeof(head));
memset(vis,0,sizeof(vis));
memset(prev,-1,sizeof(prev));
for(i=0; i<nv ; i++)
dist[i]=inf;
for(i=0; i<ne ;i++)
{
scanf("%d%d%d",&u,&v,&c);
addedge(u-1,v-1,c);
addedge(v-1,u-1,c);
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m),n+m)
{
init(n,m);
Dijkstra(n,0);
printf("%dn",dist[n-1]);
}
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 大点干!早点散----------深入剖析LVS负载均衡群集原理
- javascript中元素的scrollLeft和scrollTop属性说明
- 大点干!早点散----------LVS负载均衡之LVS-NAT部署实战
- 大点干!早点散----------负载均衡LVS-DR群集部署
- 大点干!早点散----------群集负载均衡LVS DR+keepalived部署实战
- Java字符串所占字节数的小总结
- Java类加载机制详解
- 详解Java注解(Annotation)
- 你不知道的Synchronized
- 从Java并发集合看锁优化策略
- Java常用并发容器总结(二)
- Java常用并发容器总结(一)
- Java常用并发容器总结(三)
- Java常用并发容器总结(四)
- Js常见点击跳转方式