图测试数据生成代码:

#include<bits/stdc++.h>
using namespace std;
int random(int mod) {
    return rand() % mod;
}

int main() {
    freopen("gragh2.txt", "w", stdout);
    srand(time(NULL));
    , m =  << ;
    int a, b;
    printf("%d %d\n", n, m);
    ; i < m; ++i) {
        a = random(n), b = random(n);
        )b = ;
        )b = n - ;
        else if(a == b)++b;
        printf("%d %d\n", a, b);
    }
    ;
}

测试代码:

#include<bits/stdc++.h>
using namespace std;
;
int n, m;
vector<int> g[MAXN];
bool vis[MAXN];
void dfs(int s) {
    vis[s] = true;
    , sz = g[s].size(); i < sz; ++i) {
        int adj = g[s][i];
        if(!vis[adj])dfs(adj);
    }
}

queue<int> que;
void bfs(int s) {
    while(!que.empty())que.pop();
    vis[s] = true;
    que.push(s);
    while(!que.empty()) {
        int top = que.front();
        que.pop();
        , sz = g[top].size(); i < sz; ++i) {
            int adj = g[top][i];
            if(!vis[adj]) {
                que.push(adj);
                vis[adj] = true;
            }
        }
    }
}

/**
跑dfs时,结果写到result1.txt中。
跑bfs时,结果写到result2.txt中。
*/
int main() {
    freopen("gragh2.txt", "r", stdin);
    freopen("result1.txt", "w", stdout);
    int a, b;
    while(~scanf("%d%d", &n, &m)) {
        ; i < m; ++i) {
            scanf("%d%d", &a, &b);
            g[a].push_back(b);
            g[b].push_back(a);
        }
        int start, endd;
        srand(time(NULL));
        ; k < ; ++k) {
            ;
            ; i < ; ++i) {
                memset(vis, , sizeof(vis));
                start = clock();
                dfs(rand() % n);
                endd = clock();
                sum += endd - start;
            }
            printf("%d\n", sum);
        }
    }
    ;
}

结果比较:

可以初步得出结论:当点的数量是10W,边数是400W+时,跑10次,每次100个随机起始点,BFS比DFS要快些。因此,搜索图时,如果两者都能用,那就选BFS,因为BFS用了更多的空间来换“递归时保存栈信息“的时间。

图搜索——使用DFS和BFS耗时比较的更多相关文章

  1. 【数据结构与算法笔记04】对图搜索策略的一些思考(包括DFS和BFS)

    图搜索策略 这里的"图搜索策略"应该怎么理解呢? 首先,是"图搜索",所谓图无非就是由节点和边组成的,那么图搜索也就是将这个图中所有的节点和边都访问一遍. 其次 ...

  2. Clone Graph leetcode java(DFS and BFS 基础)

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  3. 数据结构(12) -- 图的邻接矩阵的DFS和BFS

    //////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...

  4. 数据结构(11) -- 邻接表存储图的DFS和BFS

    /////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...

  5. 在DFS和BFS中一般情况可以不用vis[][]数组标记

    开始学dfs 与bfs 时一直喜欢用vis[][]来标记有没有访问过, 现在我觉得没有必要用vis[][]标记了 看代码 用'#'表示墙,'.'表示道路 if(所有情况都满足){ map[i][j]= ...

  6. 图论中DFS与BFS的区别、用法、详解…

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

  7. 图论中DFS与BFS的区别、用法、详解?

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

  8. 数据结构基础(21) --DFS与BFS

    DFS 从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈). //使用邻接矩阵存储的无向图的深度 ...

  9. dfs和bfs的区别

    详见转载博客:https://www.cnblogs.com/wzl19981116/p/9397203.html 1.dfs(深度优先搜索)是两个搜索中先理解并使用的,其实就是暴力把所有的路径都搜索 ...

随机推荐

  1. 51Nod 1737 配对(树的重心)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1737 题意: 思路: 树的重心. 树的重心就是其所以子树的最大的子树结点 ...

  2. UVa 10054 项链(欧拉回路)

    https://vjudge.net/problem/UVA-10054 题意:有一种由彩色珠子连接成的项链.每个珠子的两半由不同颜色组成.相邻两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要 ...

  3. [WCF安全2]使用wsHttpBinding构建UserName授权的WCF应用程序,非SSL

    上一篇文章中介绍了如何使用basicHttpBinding构建UserName授权的WCF应用程序,本文将为您介绍如何使用wsHttpBinding构建非SSL的UserName安全授权的WCF应用程 ...

  4. 山东省第四届ACM程序设计竞赛部分题解

    A : Rescue The Princess 题意: 给你平面上的两个点A,B,求点C使得A,B,C逆时针成等边三角形. 思路: http://www.cnblogs.com/E-star/arch ...

  5. .net core开发 (一)

    1..net core: 是微软开发的另外一个可以跨平台的.net 2..net framework,.net core, mono的关系三者都是.net在不同操作系统的实现 3. .net core ...

  6. Tensorflow一些常用基本概念与函数(三)

    摘要:本系列主要对tf的一些常用概念与方法进行描述.本文主要针对tensorflow的数据IO.图的运行等相关函数进行讲解.为‘Tensorflow一些常用基本概念与函数’系列之三. 1.序言 本文所 ...

  7. 最近公共祖先问题 LCA

    2018-03-10 18:04:55 在图论和计算机科学中,最近公共祖先,LCA(Lowest Common Ancestor)是指在一个树或者有向无环图中同时拥有v和w作为后代的最深的节点. 计算 ...

  8. ✅问题:Rails.ajax的data不支持{}hash格式。必须使用string。 dataType的格式。

    Rails.ajax({ url: url, type: "PATCH", data: {"post":{"category_id":thi ...

  9. Android之仿微信发朋友圈图片选择功能

    最近项目中需要用到发表评论选择多张图片和拍照的功能,于是就仿照微信发表朋友圈的选择图片和拍照做了一个这样的案例,经过查找资料终于完成了此功能, 最近有时间就写出来和大家分享一下,希望对大家有所帮助. ...

  10. hdu4686矩阵快速幂

    花了一个多小时终于ac了,有时候真的是需要冷静一下重新打一遍才行. 这题就是 |aod(n)|   =    |1        ax*bx       ax*by      ay*bx       ...