Fight Against Traffic -简单dijkstra算法使用
题目大意
n m s t 分别为点的个数, 边的个数,以及两个特殊的点
要求s与t间的距离在新增一条边下不变
基本思路
用dj算法由s 到 t两个点分别进行一次计算
得出每个点到s与t的最短值
遍历计算每两个没建立联系的边建立联系后,s与t的距离,并与初始时距离比较
若不变则记录(s与t的值必定为新建经由新建这条边的数值或原始值中最小一个)
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <bitset>
#include <memory.h>
#define MS 1010
#define END 0x3f3f3f3f
using namespace std;
int a[MS][MS]; //閭绘帴琛?
priority_queue <int> q;
void dijsktra(int start, int N, int d[MS]){
int i, j;
bool v[MS];
memset(v, 0, sizeof(v));
d[start] = 0;
for(i = 1; i < N; i++){
int x = 0;
for(j = 1; j <= N; j++)
if(!v[j] && (x == 0|| d[j] < d[x])) x = j;
v[x] = 1;
/* printf("%d\n", x);*/
for(j = 1; j <= N; j++){
d[j] = min(d[j], d[x]+a[x][j]);
/* printf("%d %d\n", d[x], a[x][j]);*/
}
}
}
int main(){
int N, M, S, T;
int temp_x, temp_y;
while(scanf("%d%d%d%d", &N, &M, &S, &T) == 4){
//init
int i, j;
memset(a, 0x3f, sizeof(a));
for(i = 0; i <= N; i++) a[i][i] = 0;
for(i = 0; i < M; i++){
scanf("%d%d", &temp_x, &temp_y);
a[temp_x][temp_y] = 1;
a[temp_y][temp_x] = 1;
}
/* for(i = 1; i <= N; i++){
for(j = 1; j <= N; j++){
if(a[i][j] > 10)
printf("* ");
else
printf("%d ", a[i][j]);
}
printf("\n");
}*/
int dt[MS], ds[MS];
memset(ds, 0x3f, sizeof(ds));
memset(dt, 0x3f, sizeof(dt));
dijsktra(T, N, dt);
dijsktra(S, N, ds);
int length = ds[T];
/* for(i = 0; i <= N; i++) printf("%d ", dt[i]);
printf("\n");
printf("%d\n", length);*/
int count = 0;
for(i = 1; i <= N; i++){
for(j = i+1; j <= N; j++){
if(a[i][j] == 1) continue;
if(ds[i]+dt[j]+1 >= length && ds[j] + dt[i] +1 >= length){
/*printf("%d %d %d %d\n", i, j, ds[i]+dt[j]+1, ds[j]+dt[i]+1);*/
count++;
}
}
}
printf("%d\n", count);
/* for(i = 1; i <= N; i++)
printf("%d ", d[i]);
printf("\n");*/
}
}
Fight Against Traffic -简单dijkstra算法使用的更多相关文章
- 图论基础之Dijkstra算法的初探
图论,顾名思义就是有图有论. 图:由点"Vertex"和边"Edge "组成,且图分为有向图和无向图(本文讨论有向图),之前做毕业设计的 ...
- 算法笔记_068:Dijkstra算法简单介绍(Java)
目录 1 问题描述 2 解决方案 2.1 使用Dijkstra算法得到最短距离示例 2.2 具体编码 1 问题描述 何为Dijkstra算法? Dijkstra算法功能:给出加权连通图中一个顶点, ...
- Dijkstra算法简单实现(C++)
图的最短路径问题主要包括三种算法: (1)Dijkstra (没有负权边的单源最短路径) (2)Floyed (多源最短路径) (3)Bellman (含有负权边的单源最短路径) 本文主要讲使用C++ ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- 单源最短路径——Dijkstra算法学习
每次都以为自己理解了Dijkstra这个算法,但是过没多久又忘记了,这应该是第4.5次重温这个算法了. 这次是看的胡鹏的<地理信息系统>,看完之后突然意识到用数学公式表示算法流程是如此的好 ...
- [图论]Dijkstra 算法小结
Dijkstra 算法小结 By Wine93 2013.11 1. Dijkstra 算法相关介绍 算法阐述:Dijkstra是解决单源最短路径的算法,它可以在O(n^2)内计算出源点(s)到图中 ...
- 单源最短路径——dijkstra算法
dijkstra算法与prim算法的区别 1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的 ...
- 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法
Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...
- 单源最短路径—Bellman-Ford和Dijkstra算法
Bellman-Ford算法:通过对边进行松弛操作来渐近地降低从源结点s到每个结点v的最短路径的估计值v.d,直到该估计值与实际的最短路径权重相同时为止.该算法主要是基于下面的定理: 设G=(V,E) ...
随机推荐
- 瓷砖覆盖(状压DP)
题目描述 Description 用1*2的瓷砖去铺N*M的地面,问有多少种铺法 输入描述 Input Description 第一行有两数n,m.表示地面的大小 输出描述 Output Descri ...
- 软件测试的生命周期&测试流程
一.软件的生命周期 二.软件生命周期的阶段 三.软件模型 四.软件测试的基本流程 五.软件开发流程.测试流程梳理 六.C/S与B/S架构 七.对软件测试行业的理解 八.常见笔试面试题 一.软件的生命周 ...
- PIE使IE浏览器支持CSS3属性(圆角、阴影、渐变)
http://www.360doc.com/content/12/1214/09/11181348_253939277.shtml PIE使IE浏览器支持CSS3属性(圆角.阴影.渐变) 2012-1 ...
- 【手撸一个ORM】第七步、SqlDataReader转实体
说明 使用Expression(表达式目录树)转Entity的文章在园子里有很多,思路也大致也一样,我在前面有篇文章对解决思路有些说明,有兴趣的小伙伴可以看下 (传送门),刚接触表达式目录树时写的,不 ...
- D. Little Artem and Dance
题目链接:http://codeforces.com/problemset/problem/669/D D. Little Artem and Dance time limit per test 2 ...
- Java文件与io——打印流和对象流
打印流的主要功能是用于输出,在整个IO包中打印流分为两种类型: 字节打印流:PrintStream 字符打印流:PrintWriter 打印流可以很方便的进行输出 public class Print ...
- c#文件相关笔记
1.将*.txt文件内容转换为一个字符串str FileStream fs = new FileStream("路径\\*.txt", FileMode.Open); Stream ...
- js中的onclick事件传参需要注意的问题
如果参数是数值类型可以直接传,如果是字符串类型需要在字符串前后加上双引号,双引号需要转义 如 onclick="test(0)"; 直接传值 参数为数值 onclick=&quo ...
- asp.net 在IIS上配置出现的一些问题
1.可能会遇到一下图的错无.请求的内容似乎是脚本.因而将无法由静态文件处理程序来处理---大概的原因是应用程序池选择错误了.如第二幅图如此解决即可 解决方案如下两个图所示. 我遇到了以上的问题之后能也 ...
- web端 css hack(一)
逢10月小长假,几天不敲键盘,浑身难受.也是有时间分享一下自己遇到的css问题.先说一下什么css hack 简单介绍一下css hack: 定义: 一般都是利用各浏览器的支持CSS的能力和BUG来进 ...