//0.140s #include<iostream> #include<queue> #include<cstring> #include<vector> using namespace std; const int maxn = 100005; const int inf = 1 << 30; int i, a, b, c, n, m; bool vis[maxn]; struct node { int v; int c; node* next; }G[maxn * 4]; node *adj[maxn], *cur, *p; int path[maxn], d[maxn], w[maxn], bs; void rev_bfs() { memset(d, 0, (n + 1) * sizeof(int)); d[n] = 1; queue<int> q; q.push(n); while (!q.empty()) { a = q.front(); q.pop(); if (d[1] && d[a] >= d[1]) { continue;//剪枝1 } for (p = adj[a]; p; p = p->next) { b = p->v; if (!d[b]) { d[b] = d[a] + 1; q.push(b); } } } } void bfs() { memset(vis,0, sizeof(vis)); vis[1] = true; vector<int> q1; q1.push_back(1); m = d[1]-1; while(m){ bs = inf; for (i = 0; i < q1.size(); i++) { a = q1[i]; for (p = adj[a]; p; p = p->next) { b = p->v; c = p->c; if (d[b] == m && c < bs) bs = c; } } vector<int> q2; for (i = 0; i < q1.size(); i++) { a = q1[i]; for (p = adj[a]; p; p = p->next) { b = p->v; if (p->c == bs && d[b] == m && !vis[b]) { vis[b] = true;//剪枝2 q2.push_back(b); //cout<<a<<'-'<<bs<<'-' << p->v << endl; } } } w[m--] = bs; q1 = q2; } printf("%d\n", d[1]-1); printf("%d", w[d[1]-1]); for (i =d[1]-2; i >0; i--) { printf(" %d", w[i]); } printf("\n"); } int main() { while (scanf("%d%d", &n, &m) == 2) { memset(adj, 0, sizeof(adj)); cur = G; for (i = 0; i < m; i++) { scanf("%d%d%d", &a, &b, &c); cur->v = b; cur->c = c; cur->next = adj[a];//从前面插入 adj[a] = cur++; cur->v = a; cur->c = c; cur->next = adj[b]; adj[b] = cur++; } rev_bfs(); bfs(); } return 0; } /* 4 6 1 2 1 1 3 2 3 4 3 2 3 1 2 4 4 3 1 1 */
相关推荐
在IT领域,尤其是在算法和计算机科学中,"魔方-BFS-输入_魔方bfs_魔方降群法+双向bfs_魔方降群_"这个标题涉及到的是使用广度优先搜索(Breadth First Search, BFS)解决魔方问题的高级技巧。魔方是一种三维旋转拼图...
通过双向的BFS算法,使得公交安排这样一个问题在最大程度上减少了时间复杂度。而且对于换乘次数的限制一直是一个瓶颈,会严重增加时间复杂度,但本程序通过matlab巧妙的设计,使得换乘10次以内都可以理想时间内解答...
"UI_missionaries_project"项目就是这样一个例子,它运用了三种经典的图遍历算法——深度优先搜索(DFS)、广度优先搜索(BFS)以及双向广度优先搜索(Bidirectional BFS),来解决著名的“传教士与食人族”问题。...
题目:752. 打开转盘锁执行用时:204 ms, 在所有 C++ 提交中击败了40.14%的用户内存消耗:40.3 MB, 在所有 C++ 提交中击败了25.
该问题常用于演示搜索算法,如宽度优先搜索(BFS)、深度优先搜索(DFS)、双向宽度优先搜索(BBFS)以及A*搜索。 首先,**宽度优先搜索(BFS)**是一种按层进行搜索的算法,它会优先检查离起点近的解。在八数码...
标题中的"BFS.rar_bfs_bfs matlab_bfs matlab"提到了"BFS"以及与MATLAB相关的优化算法。BFS,全称为Breadth-First Search(广度优先搜索),通常用于图论或树结构的遍历。在MATLAB环境中,BFS可以被应用于解决各种...
**广度优先搜索(BFS)**是一种在图或树数据结构中进行遍历或搜索的算法,其基本思想是从根节点开始,按照层次顺序依次访问每个节点。它首先访问最近的节点,然后逐渐扩展到更远的节点。在有向图中,BFS依然按照层次...
代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 ...
标题"simulink BFSK仿真"表明我们要探讨的是使用Simulink进行二进制频移键控(Binary Frequency Shift Keying, BFSK)的模拟与仿真。BFSK是一种数字调制技术,通过改变载波频率来传输二进制数据(0或1)。在Simulink...
- `<list>` 提供了双向链表容器的支持。 - `<queue>` 提供了队列容器的支持。 - `<algorithm>` 包含了一些常用的算法函数,如排序等,但本程序并未使用到这些功能。 ##### 2. 命名空间使用 ```cpp using namespace...
标题“bfsk程序代码matlab”指的是使用MATLAB语言实现的BFSK(Binary Frequency Shift Keying,二进制频率移键控)编码技术的程序代码。BFSK是一种数字调制方法,通过改变载波频率来传输二进制数据,其中“0”和“1...
根据给定文件中的标题“DFS \BFS生成树”、描述以及部分代码内容,我们可以提炼出以下几个关键知识点:邻接表、深度优先搜索(Depth-First Search, DFS)、广度优先搜索(Breadth-First Search, BFS)以及如何利用这...
在本文中,我们将深入探讨如何使用宽度优先搜索(BFS)算法实现经典的“贪吃蛇”游戏。贪吃蛇是一款非常流行的电子游戏,玩家需要控制一个不断移动的蛇去吃食物,每次吃到食物,蛇的长度就会增加,游戏区域也会相应...
宽度优先搜索(BFS,Breadth-First Search)是一种用于遍历或搜索树或图的算法,它从根节点开始,沿着树的宽度方向进行探索,直到找到目标节点或者遍历完整个树。在图中,BFS通常用于找出两个节点间的最短路径,或者...
**标题中的“bfs.rar_BFS+c++_bfs”表明这是一个关于C++实现BFS算法的压缩包文件,可能包含了一个名为“bfs”的源代码文件。** **描述中的“this is code for bfs in c++”进一步确认了这个压缩包内代码的主要功能...
【标题】"bfs.tar.gz_C#BFS_bfs" 提供的是一个使用C#实现的广度优先搜索(BFS)算法的代码压缩包。这个压缩包中的内容主要是关于如何在并行计算环境中,利用CUDA(Compute Unified Device Architecture)技术来优化...
**广度优先搜索(BFS)算法** 广度优先搜索(BFS)是一种在图或树数据结构中进行遍历的算法,它按照从根节点开始,先访问所有相邻节点,然后依次对每个已访问节点的相邻节点进行访问的原则进行搜索。在 BFS 中,...
标题中的“bfsk_m.rar_BFSK_BFSK matlab_BFSK matlab_fsk_matlab BFSK”表明这是一个关于BFSK(Binary Frequency Shift Keying,二进制频率移键调制)的仿真项目,使用MATLAB语言进行实现。BFSK是一种数字调制技术,...
**广度优先搜索(Breadth-First Search, BFS)**是一种在图或树中搜索节点的算法,它按照从根节点开始,逐层扩展的方式进行。在MATLAB中实现BFS,可以帮助我们解决许多问题,例如查找最短路径、判断图的连通性等。 ...
**标题:“BFS.rar_BFS JAVA_Bfs算法_bfs java_java b”** **描述:“java 数据结构 实现图的广度优先算法”** 在计算机科学中,数据结构和算法是编程的基础,它们决定了程序的效率和性能。在这个压缩包中,重点是...