无权最短路 - 宽度优先搜索

2017-09-13 21:54:52

writer:pprp

图论全部都忘记了,重新学一下吧,之前学的实在是太烂了

测试数据如下:

7 12//顶点个数, 路径个数
3 1
1 4
1 2
2 4
2 5
4 3
4 5
4 6
4 7
3 6
5 7
6 7
3//起始点

代码如下:

/*
@theme:无权最短路径问题
@complexity:O(|E| + |V|)
@writer:pprp
@begin:21:10
@end:21:53
@error:
@declare: breadth first search
@date:2017/9/13
*/

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;
const int maxn = 100;
const int INF = 10000;
vector<int> vt[maxn];
queue<int> qu;
int dis[maxn];
int vis[maxn];
int stpt, vertex, path;

void init()
{
    for(int i = 0 ; i < maxn; i++)
        dis[i] = INF;
    memset(vis,0,sizeof(vis));
}

void BFS(int v)
{
    dis[v] = 0;
    qu.push(v);
    vis[v] = 1;
    while(!qu.empty())
    {
        v = qu.front();
        qu.pop();
        for(int i = 0 ; i < (int)vt[v].size(); i++)
        {
            if(dis[vt[v][i]] == INF)
            {
                dis[vt[v][i]] = dis[v] + 1;
                qu.push(vt[v][i]);
            }
        }
    }

}

int main()
{
    freopen("in.txt","r",stdin);
    init();
    cin >> vertex >> path;
    int x, y;
    for(int i = 0 ; i < path ; i++)
    {
        cin >> x >> y;
        vt[x].push_back(y);
    }
    cin >> stpt;
    BFS(stpt);

    for(int i = 1 ; i < vertex; i++)
        cout << dis[i] << " ";
    cout << endl;

    return 0;
}
时间: 2024-10-25 23:29:22

无权最短路 - 宽度优先搜索的相关文章

广度/宽度优先搜索(BFS)详解

广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名. 一般可以用它做什么呢?一个 广度/宽度优先搜索(BFS) 算法导论里边会给出不少严格的证明,我想尽量写得通俗一点,因此采用一些直观的讲法来伪装成证明,关键的point能够帮你get到就好. 2.图的概念 刚刚说的广度优先搜索是连通图的一种遍历策略,那就有必要将图先简单解释一下.

宽度优先搜索(BFS)

宽度优先搜索,又称为广度优先搜索,简称BFS 搜索过程:从初始结点开始,逐层向下扩展,即第n层搜索未完成,不得进入下一层搜索 一.初始结点入队,进入循环 二.取出队列的第一个元素 三.判断该结点是不是目标结点,如果是目标结点,则问题解决,跳出循环 四.如果该结点不是目标结点,判断其是否能够扩展,若不能,跳到步骤二 五.如果该结点能扩展,将其子结点放入队列的尾部 六.跳到步骤二 用一个经典的例子(走迷宫)来感受下 给定一个二维数组 int a[10][10] = {0 , 1 , 0 , 0 ,

算法7-4:宽度优先搜索

宽度优先搜索的基本思想就是先将源点添加到一个队列中, 每次从队列中取出一个顶点,将该顶点的邻居顶点中没有拜访过的顶点都添加到队列中,最后直到队列消耗完毕为止. 应用 宽度优先搜索可以解决最短路径问题.而最短路径算法在互联网中应用非常广泛,尤其是路由这块.因为路由追求的是高效,所以每个路由路径都是通过最短路径计算出来的.如果没有最短路径算法,我们可能就享受不到这么快的网速了. 另外,宽度优先搜索在快递行业也会用到,用于计算最短路径. 代码 import java.util.Stack; /** *

宽度优先搜索

Breadth First Search 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想.其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果.换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止. 与树的层序遍历一样 遍历结果为 1 2 3 4 5 6 .....21 22 操作: 根节点入队: wh

(总结)宽度优先搜索(Breadth First Search)

ACM入门最经典的开局一般都是宽搜. 宽度优先搜索(以下均简称bfs)一般用于树和图的搜索,在ACM中属于比较基础的技巧,因此需要非常熟练的掌握. 那么从最基础的bfs开始讲起.在一个迷宫中,有一个起点和一个终点(出口),和一些障碍物(无法通过). 比如下图

挑战程序2.1.5 穷竭搜索&gt;&gt;宽度优先搜索(练POJ3669)

先对比一下DFS和BFS         深度优先搜索DFS                                   宽度优先搜索BFS 明显可以看出搜索顺序不同. DFS是搜索单条路径到底部,再回溯. BFS是搜索近的状态,直到底部,一般在求解最短路径或者最短步数上应用. BFS要用到队列呢.. 队列的用法看一看http://blog.csdn.net/cindywry/article/details/51919282 练习题系列--------------------- 题目:p

层层递进——宽度优先搜索(BFS)

问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/7429645.html 最开始小哼在入口(1,1)处,一步之内可以到达的点有(1,2)和(2,1). 但是小哈并不在这两个点上,那小哼只能通过(1,2)和(2,1)这两点继续往下走. 比如现在小哼走到了(1,2)这个点,之后他又能够到达哪些新的点呢?有(2,2).再看看通过(2,1)又可以到达哪些点呢?可以

2.3 基于宽度优先搜索的网页爬虫原理讲解

上一节我们下载并使用了宽度优先的爬虫,这一节我们来具体看一下这个爬虫的原理. 首先,查看HTML.py的源代码. 第一个函数: def get_html(url): try: par = urlparse(url) Default_Header = {'X-Requested-With': 'XMLHttpRequest', 'Referer': par[0] + '://' + par[1], 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64)

&quot;《算法导论》之‘图’&quot;:深度优先搜索、宽度优先搜索及连通分量

本文兼参考自<算法导论>及<算法>. 以前一直不能够理解深度优先搜索和广度优先搜索,总是很怕去碰它们,但经过阅读上边提到的两本书,豁然开朗,马上就能理解得更进一步.  1. 深度优先搜索  1.1 迷宫搜索 在<算法>这本书中,作者写了很好的一个故事.这个故事让我马上理解了深度优先搜索的思想. 如下图1-1所示,如何在这个迷宫中找到出路呢?方法见图1-2. 图1-1 等价的迷宫模型 探索迷宫而不迷路的一种古老办法(至少可以追溯到忒修斯和米诺陶的传说)叫做Tremaux搜