最短路(hdu2544)Dijkstra算法二
最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 24283 Accepted Submission(s): 10465
#include<iostream>
#include<cstring>
#include<cstdio>
#define INF 0xfffffff//很大的数,16进制 f代表15;
#define MAX 1005
using namespace std;
int map[MAX][MAX];
int visit[MAX],dis[MAX];
int N,M,n;
int Dijkstra()
{
int i,j;
// memset(visit,false,sizeof(visit)); 31ms 所以可以不写memset就不写
for(i=;i<=n;i++)
{
dis[i]=map[][i];
visit[i]=false; // 15ms
}
dis[]=;
visit[]=true;
for(i=;i<=n;i++)
{
int tmp=INF;
int k;
for(j=;j<=n;j++)
if(!visit[j]&&dis[j]<tmp)
tmp=dis[k=j];
//if(tmp==INF) break; //调试的时候用
visit[k]=true;
for(j=;j<=n;j++)
{
if(!visit[j]&&dis[j]>dis[k]+map[k][j])
dis[j]=dis[k]+map[k][j];
}
}
return dis[n];
}
int main()
{
int i,j,k,a,b,time;
while(scanf("%d%d",&N,&M),N||M)
{
for(i=;i<MAX;i++)
for(j=;j<MAX;j++)
map[i][j]=INF;
for(i=;i<=M;i++)
{
scanf("%d%d%d",&a,&b,&time);
if(time<map[a][b])
map[a][b]=map[b][a]=time;//双向的
} n=N+;
map[][]=map[][]=;
map[n][N]=map[N][n]=;
printf("%d\n",Dijkstra());
}
return ;
}
真的是模版不信,你看我源代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#define INF 0xfffffff//很大的数,16进制 f代表15;
#define MAX 1005
using namespace std;
int map[MAX][MAX];
int visit[MAX],dis[MAX];
int N,M,n;
int Dijkstra()
{
int i,j;
// memset(visit,false,sizeof(visit)); 31ms 所以可以不写memset就不写
for(i=;i<=n;i++)
{
dis[i]=map[][i];
visit[i]=false; // 15ms
}
dis[]=;
visit[]=true;
for(i=;i<=n;i++)
{
int tmp=INF;
int k;
for(j=;j<=n;j++)
if(!visit[j]&&dis[j]<tmp)
tmp=dis[k=j];
//if(tmp==INF) break; //调试的时候用
visit[k]=true;
for(j=;j<=n;j++)
{
if(!visit[j]&&dis[j]>dis[k]+map[k][j])
dis[j]=dis[k]+map[k][j];
}
}
return dis[n];
}
int main()
{
int i,j,k,a,b,time;
while(scanf("%d%d",&N,&M),N||M)
{
for(i=;i<MAX;i++)
for(j=;j<MAX;j++)
map[i][j]=INF;
// n=0;
for(i=;i<=M;i++)
{
scanf("%d%d%d",&a,&b,&time);
if(time<map[a][b])
map[a][b]=map[b][a]=time;//双向的
// if(a>n) n=a;
// if(b>n) n=b;
} // n++;// 最大地点数+1
n=N+; /* for(i=1;i<=S;i++)
{
scanf("%d",&a);
map[0][a]=map[a][0]=0;//与原点相连的,距离为0;
} for(i=1;i<=D;i++)
{
scanf("%d",&a);
map[n][a]=map[a][n]=0;//终点n到想去的地方的距离是0;
}*/
map[][]=map[][]=;
map[n][N]=map[N][n]=;
printf("%d\n",Dijkstra());
}
return ;
}
刚刚开始学习,要好好看代码;理解透才行。。。
最短路(hdu2544)Dijkstra算法二的更多相关文章
- 最短路和次短路问题,dijkstra算法
/* *题目大意: *在一个有向图中,求从s到t两个点之间的最短路和比最短路长1的次短路的条数之和; * *算法思想: *用A*求第K短路,目测会超时,直接在dijkstra算法上求次短路; ...
- 单源最短路:Dijkstra算法 及 关于负权的讨论
描述: 对于图(有向无向都适用),求某一点到其他任一点的最短路径(不能有负权边). 操作: 1. 初始化: 一个节点大小的数组dist[n] 源点的距离初始化为0,与源点直接相连的初始化为其权重,其他 ...
- Dijkstra算法(二)之 C++详解
本章是迪杰斯特拉算法的C++实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法图解 3. 迪杰斯特拉算法的代码说明 4. 迪杰斯特拉算法的源码 转载请注明出处:http://www.cnbl ...
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- [Swust OJ 842]--实验室和食堂(最短路,Dijkstra算法)
题目链接:http://acm.swust.edu.cn/problem/842/ Time limit(ms): 1000 Memory limit(kb): 10000 Description ...
- 最短路之 Dijkstra 算法
普通的 Dijkstra 这是一种运用贪心的单源最短路算法,就是求从一个节点出发,到任意一个点的最短距离 首先我们要一个图 假设要求从 1 开始的单源最短路 dis[] 表示最短路数组, vis[] ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- 最短路之Dijkstra算法
1. 邻接矩阵 int cost[MAX_V][MAX_V]; //assume cost[u][v]>0 int d[MAX_V]; bool used[MAX_V]; void Dijkst ...
- hdu2544 最短路 Dijkstra算法
最短路(Dijkstra算法模板题) Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
随机推荐
- JVM活学活用——类加载机制
类的实例化过程 有父类的情况 1. 加载父类静态 1.1 为静态属性分配存储空间并赋初始值 1.2 执行静态初始化块和静态初始化语句(从上至下) 2. 加载子类静态 2.1 为静态 ...
- cad2019卸载/安装失败/如何彻底卸载清除干净cad2019注册表和文件的方法
cad2019提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装cad2019失败提示cad2019安装未完成,某些产品无法安装,也有时候想重新安装cad2019 ...
- mongoose入门
概述 像Mysql和Mongodb这样的数据库,一般都是在命令行或者工具里面进行操作,如果想在node搭建的服务器上面操作,就必须要利用特殊的模块的.其中操作Mongodb数据库需要用到mongoos ...
- nginx常用的超时配置说明
client_header_timeout 语法 client_header_timeout time默认值 60s上下文 http server说明 指定等待client发送一个请求头的超时时间(例 ...
- 【hyperscan】编译hyperscan 4.0.0
ref: http://01org.github.io/hyperscan/dev-reference/getting_started.html 1. 硬件需求 intel x86处理器 64-bit ...
- Shell - 简明Shell入门04 - 判断语句(If)
示例脚本及注释 #!/bin/bash var=$1 # 将脚本的第一个参数赋值给变量var if test $var # test - check file types and compare va ...
- Android v7包下Toolbar和ActionBarActivity实现后退导航效果
android.support.v7包下的ToolBar和ActionBarActivity,均自带后退导航按钮,只是要手动开启,让它显示出来.先来看看ToolBar,页面前台代码: <andr ...
- python连接mysql数据库简单例子
今天用pyhton2连接本地的mysql数据库,总的来说比较简单,但还是遇到一些小问题 代码如下: # -*- coding: utf-8 -*- import os import MySQLdb i ...
- [原创]K8飞刀20160613 Plesk密码 & 注册表16进制转换 & Html实体解密
K8飞刀 by K8拉登哥哥@[K8搞基大队]博客: http://qqhack8.blog.163.com 简介: K8飞刀是一款多功能的安全测试工具. Hacker Swiss Army Kni ...
- [转]网页实时聊天之js和jQuery实现ajax长轮询 PHP
网页实时聊天之js和jQuery实现ajax长轮询 众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的 ...