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. ...
随机推荐
- 阿里云服务器IIS启用HTTPS协议(转)
https://www.cnblogs.com/randytech/p/7017188.html
- 【ContestHunter】【弱省胡策】【Round4】
01分数规划(网络流)+状压DP+树形DP 官方题解地址:http://pan.baidu.com/s/1mg5S5z6 A 好神啊= =第一次写01分数规划 其实分数规划是要求$$ Maximize ...
- 谈谈javascript的函数作用域
在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取 ...
- C#.NET常见问题(FAQ)-如何修改代码字体
工具-选项-字体和颜色 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: http://csrob ...
- 2.6.33中关于at91sam9260的i2c controller驱动的问题
在为at91sam9260移植2.6.33内核的I2C时,直接用driver/bus/i2c-at91.c这个iic的adapter驱动是不能用的,而且在makemenuconfig时,在device ...
- 把mysql数据库生成数据字典,直接可用
便于查看数据库表.字段,做一个数据字典是很有必要的,下面只需要简单更改下配置就可以用了,样式也是挺好的. <?php header('content-type:text/html;charset ...
- php之表单-1
PHP 表单和用户输入 PHP 中的 $_GET 和 $_POST 变量用于检索表单中的信息,比如用户输入. PHP 表单处理 有一点很重要的事情值得注意,当处理 HTML 表单时,PHP 能把来自 ...
- JAVA中MD5加密实现
MD5加密实现 结 package com.pb; import java.io.UnsupportedEncodingException; import java.security.Message ...
- 算法笔记_206:第五届蓝桥杯软件类决赛真题(Java语言A组)
目录 1 海盗分金币 2 六角幻方 3 格子放鸡蛋 4 排列序数 5 幂一矩阵 6 供水设施 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 海盗分金币 有5个海盗,相约进行一次帆船比赛. 比 ...
- vue 笔记二
vue制作weibo 交互 vue-> 1.0 vue-resource ajax php 服务器环境(node) this.$http.get()/post()/jsonp() this.$h ...