最短路径

(模板)解决带负权最短路径 Bellman-ford 与 SPFA(前者的队列优化)

会有一股神秘感。 提交于 2019-12-02 09:52:55
// 模板记录 // Bellman-ford O(V*E) s到每个点的最短路 1 #include<cstdio> 2 #define INF 0x3f3f3f3f 3 const int MAXN = 100+5; 4 const int MAXM = 10000+5; 5 6 struct node { 7 int u, v, w; 8 } edge[MAXM]; 9 10 int n, m, x;// 点的数量,边的数量,源点 11 int dis[MAXN]; 12 13 bool Bellman_ford() { 14 for(int i = 0; i < n-1; ++i) { 15 for(int j = 0; j != m; ++j) { 16 if(dis[edge[j].v] > dis[edge[j].u] + edge[j].w) { 17 dis[edge[j].v] = dis[edge[j].u] + edge[j].w; 18 } 19 } 20 } 21 bool flag = true; 22 for(int i = 0; i != m; ++i) { 23 if(dis[edge[i].v] > dis[edge[i].u] + edge[i].w) { 24 flag = false; 25 break; 26 } 27 } 28

【洛谷 1491】集合位置

天大地大妈咪最大 提交于 2019-12-01 23:39:37
题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快。还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记得狗狗的枪法永远是'S'……还有不能忘了,胖子的歌声永远是让我们惊叫的!! 今天是野猫的生日,所以想到这些也正常,只是因为是上学日,没法一起去玩了。但回忆一下那时的甜蜜总是一种幸福嘛。。。 但是每次集合的时候都会出现问题!野猫是公认的“路盲”,野猫自己心里也很清楚,每次都提前出门,但还是经常迟到,这点让大家很是无奈。后来,野猫在每次出门前,都会向花儿咨询一下路径,根据已知的路径中,总算能按时到了。 现在提出这样的一个问题:给出n个点的坐标,其中第一个为野猫的出发位置,最后一个为大家的集合位置,并给出哪些位置点是相连的。野猫从出发点到达集合点,总会挑一条最近的路走,如果野猫没找到最近的路,他就会走第二近的路。请帮野猫求一下这条第二最短路径长度。 输入格式 第一行是两个整数n(1<=n<=200)和m,表示一共有n个点和m条路,以下n行每行两个数xi,yi,(-500<=xi,yi<=500),代表第i个点的坐标,再往下的m行每行两个整数pj,qj,(1<=pj,qj<=n),表示两个点相通。 输出格式 只有一行包含一个数,为第二最短路线的距离(保留两位小数),如果存在多条第一短路径

最短路径问题 Dijkstra ——Python实现

☆樱花仙子☆ 提交于 2019-12-01 17:44:13
# 最短路径算法 Dijkstra # 输入:含权有向图 G=(V,E),V={1,2,3...n} # 输出:G中顶点 1 到各个顶点地最短距离 1 class Vertex: 2 #顶点类 3 def __init__(self,vid,outList): 4 self.vid = vid #出边 5 self.outList = outList #出边指向的顶点id的列表,也可以理解为邻接表 6 self.know = False #默认为假 7 self.dist = float('inf') #s到该点的距离,默认为无穷大 8 self.prev = 0 #上一个顶点的id,默认为0 9 def __eq__(self, other): 10 if isinstance(other, self.__class__): 11 return self.vid == other.vid 12 else: 13 return False 14 def __hash__(self): 15 return hash(self.vid) 1 #创建顶点对象 2 v1=Vertex(1,[2,3]) 3 v2=Vertex(2,[3,4]) 4 v3=Vertex(3,[5]) 5 v4=Vertex(4,[3,5,6]) 6 v5=Vertex(5,[6]) 7 v6=Vertex(6

1129. 颜色交替的最短路径

百般思念 提交于 2019-12-01 10:19:21
bfs struct node { int num; int color; node(int x, int y) :num(x), color(y){} }; vector<int> shortestAlternatingPaths(int n, vector<vector<int>>& red_edges, vector<vector<int>>& blue_edges) { vector<vector<int>> edges(n, vector<int> (n,0));//1红 2蓝 3红蓝 vector<vector<int>> already(n ,vector<int> (2, 0)); //already[i][0|1]=0|1 红|蓝,无|有 for (int i = 0; i < red_edges.size(); i++) { edges[red_edges[i][0]][red_edges[i][1]] += 1; } for (int i = 0; i < blue_edges.size(); i++) { edges[blue_edges[i][0]][blue_edges[i][1]] += 2; } queue<node> q; q.push(node(0, 0)); int length = 1; vector<int> res(n,-1); res

I-格蕾亲真可爱

此生再无相见时 提交于 2019-12-01 09:53:55
新生赛补题 我没有看过fate。 题目链接到P1616/校内OJ 我本来想的是最短路径或者dp,最短路径的理由是对于每次操作总可以找到一个点不影响到另外所有点(冥冥之中感觉到的,没想到真的是解题关键)。而dp的理由是杀点或者不杀点,对于每一次操作只有以上这两种可能。 但是因为无论dp还是最短路径都进度缓慢,所以我水了半小时就开始自暴自弃吃学长的面包了。 结果竟然是01背包。 我。。 为什么是01背包? 以下是结合题解想出来的 只有一种可能,存在某种最优模型使其符合01背包的前提 也就是说,存在某种最优模型,在这个模型中,删掉的每一个选中点,都不会影响到下面一个选中点。 证明如ss的博客。 我再详细解释一下 废话 dp是动态的,但是这题,主观上来讲,动态的有点猛(?)。每决定删一个点,都会影响到下面好几个点的选择与否。”是否对那些点进行下一次dp?“为 “是否杀点” 的前提条件。在dp中,这种前提条件本来是不需要的。此题的障碍正是这种“是否dp”的问题,需要多考虑一层。 很幸运,这一层坑爹考虑可以通过数论给去掉。 也就是--->见ssyeye的博客 然后就可以01背包解决了 来源: https://www.cnblogs.com/asanagiyantia/p/11676986.html

北京地铁最短路径

自闭症网瘾萝莉.ら 提交于 2019-12-01 09:17:23
gethub地址 地铁信息存储格式 23#地铁路线数 #地铁名称 1 23#1号地铁,23个站点 苹果园 0#站点名称 是否为换乘站 存储结构 typedef struct{ char station[N]; int change; } sta; typedef struct{ int weight; int L; } G; sta vertex[NUM]; G graph[NUM][NUM]; int Vsum; pair<int,int> path[NUM]; int s[NUM]; int dis[NUM]; string linename[NUM]; int coutt[NUM]; int top=-1; 寻找起始站,终点站的对应下标信息 int search(char *s){ int i; for (i=0; i<Vsum; i++) { if (!strcmp(vertex[i].station,s)) { return i; } } return -1; } 输出换乘路线 void print(int V1,int V2){ string r=""; path[V1].first=-1; int now=V2,nowL=path[V2].second,ttt; while(now!=V1&&now){ //printf("%s\n",vertex[now]

地铁出行路线规划实现

ε祈祈猫儿з 提交于 2019-12-01 09:06:10
地铁出行路线规划 简述 语言:java 编程工具:eclipse 编码格式:utf-8 本次实验函数通过邻接矩阵保存txt文件读入的站点路径信息,使用广度优先遍历求出最短路径 本次实验函数功能包括查询站点信息,查询线路信息,查询最短路径。 程序主体 1.建图 public int v; public LinkedList<Integer> adj[]; public Graph(int v){ this.v = v; adj = new LinkedList[v]; for(int i=0; i<v; ++i) { adj[i] = new LinkedList<>(); } } public void addEdge(int s,int t) { adj[s].add(t); adj[t].add(s); } 建一个v个顶点的无向图,并使用addEdge向邻接矩阵中添加边。 2.最短路径算法 int v=graph.getV(); LinkedList<Integer>[] adj=graph.getAdj(); boolean[] visited = new boolean[v]; visited[s] = true; Queue<Integer> queue = new LinkedList<>(); queue.add(s); int[] prev = new int[v]

个人项目——地铁线路规划简要分析

天涯浪子 提交于 2019-12-01 08:52:08
项目要求与实现   实现北京地铁的线路查询和两站点最短路径查询 PSP表 Personal Software Process Stages 模块文件或描述 实际花费时间(小时) 预计开发时间 5 地铁系统文件解析 model/csv 0.5 地铁模型定义 model/.. 1 地铁信息初始化 control/SubjectManager 1.5 核心算法及实现 control/PathManager 2 UI显示部分 controller/SubjectFrame 1 代码复审及测试 (异常测试,修改代码) 1 合计 7 设计思路   设计环境     采用java语言,在java1.8的环境下使用idea编译     使用命令行参数和java swing两种方式运行实现代码      数据存储     站点信息的数据存储在CSV文件中,在CSV类中实现内容的读取,文件格式如下(截取部分):          使用命令行输出的内容存储在txt文件中,线路输出格式极为简单,只有站点名称和是否开通。     站点最短距离查询输出格式为线路和经过该条线路的经过站点,如图:            算法分析     由于站点间一般不存在直接相连的路径,采用矩阵会浪费大量空间,所以采用类似于邻接链表的实现,在Station类中添加相邻的车站。         最短路径算法

地铁路线规划

三世轮回 提交于 2019-12-01 08:32:19
地铁路线规划 blog github 一.简述:    本次地铁出行线路规划个人项目,选择使用的编程语言是java语言,编程工具是eclipse,且为了降低难度与简化要求,现阶段我们可以假定程序的输入一定是正确的。同时,为了让地铁程序能与地铁线路图解耦,我们需要将地铁线路与程序分离开,将其保存成一个可读入的文件,data.txt文件。把所有线路的信息按照一定格式输入。在地铁程序上实现了三个项目需求,txt文件的导入,用户希望查询指定地铁线经过的站点的实现,两个站点间最短路径的算法实现,最后对程序进行了多次测试,都成功。 二.PSP表: 三.项目说明: 1.txt文件的输入格式: 站点 下一个站点 距离刘园 西横堤 1 西横堤 果酒厂 1 果酒厂 本溪路 1 本溪路 勤俭道 1 。。。。。。 2.包,类的功能 Model包:用来存放自定义的四个实体类,距离类,缓存类,节点类,路径类。 Manager包:用来存放两个方法,txt文件的导入,需求的几号线输出,两个站点最短路径的输出。 Test包:用来测试几个需求的包。 3.最短路径算法 public class ComputeShort { private Data data; // 存储数据的类 private EasyCache cache = new EasyCache(); // 缓存数据,防止数据量过大导致内存溢出