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) ...
随机推荐
- win10的一些设置
win10进入安全模式: 左下角->设置->更新和安全->恢复->立即重启 (重启后进入的界面可以进行一些设置来进入安全模式) win10切换账户: 任务管理器->账户
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- Java关键字和基础问题
1. Java关键字 1.1 extends和implements extends继承普通class或abstract(抽象)类(java单继承) implements多继承能力,实现interfac ...
- linux下使用shell脚本批处理命令
1.新建脚本touch first.sh 2.写入命令vi first.sh #!/bin/bash #publish service and api echo "copy file&quo ...
- Redis中String类型的Value最大可以容纳数据长度
项目中使用redis存储,key-value方式,在Redis中字符串类型的Value最多可以容纳的数据长度是512M 官方信息: A String value can be at max 512 M ...
- personalWebsite_1:历史记录汇总
最开始,根据 https://blog.csdn.net/zbl1146556298/article/details/79714239 进行网站构思设计,根据源码, 1.把gradle项目转为mav ...
- WPF根据数据项获取条目控件的方法-ItemContainerGenerator
一.方法: ContainerFromIndex:返回 ItemCollection 中指定索引处的项的容器. ContainerFromItem:返回与制定的项对应的容器(ComboxItem等条目 ...
- POS开发问题 - 跳转页面更新,返回还原旧数据
问题描述:由于需求的需要,路由需要加上缓存 <keep-alive> ,还要实现跳转就初始化,返回就还原的需求.意思就是:页面 A 跳转到页面 B ,页面 B 要初始化数据,但是 页面 B ...
- iis6.0 建立站点
公司网站的服务器甚多 其中还包括早期的iis6.0 的网站服务器 由于之前没有接触过 特此记录建立站点过程和注意事项 1.每个站点最好都新建一个用户名 方便管理 这里操作系统是 winXP 现在运行界 ...
- Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
项目中各种缺包现象... Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V ...