图测试数据生成代码:

#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. 2016"百度之星" - 初赛(Astar Round2B)1003 瞬间移动 组合数学+逆元

    瞬间移动  Accepts: 1018  Submissions: 3620  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 65536/ ...

  2. gif&png&jpg&webp

    几种图片格式的区别和联系 1.http://www.tuicool.com/articles/AbUvI3A

  3. java裁剪图片

    java裁剪图片保存到指定位置 /** * 图片裁剪通用接口 * * @param src 源图片地址,图片格式PNG * @param dest 目的图片地址 * @param x 图片起始点x坐标 ...

  4. windows下的IO模型之选择(select)模型

    1.选择(select)模型:选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字.让套接字进行工作. 选择模型的核心是FD_SET集合和select函数.通过该函数,我们可以 ...

  5. poj 2029 Get Many Persimmon Trees 各种解法都有,其实就是瞎搞不算吧是dp

    连接:http://poj.org/problem?id=2029 题意:给你一个map,然后在上面种树,问你h*w的矩形上最多有几棵树~这题直接搜就可以.不能算是DP 用树状数组也可作. #incl ...

  6. [转载]LeetCode: Gray Code

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  7. python 发送QQ邮件的小例子

    首先QQ邮件用第三方客户端发送要申请验证码.而不是QQ的密码. 授权码就是你接下来登录要使用的密码 那么剩下的工作就很简单了.附简单代码如下: #coding:utf-8 import smtplib ...

  8. PostgreSQL查询长连接

    apple=# select pid, backend_start, xact_start, query_start, waiting, state, backend_xid from pg_stat ...

  9. ZetCode PyQt4 tutorial layout management

    !/usr/bin/python -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial This example shows ...

  10. iPhone设备及屏幕适配

    // // Common.h // 微信 // // #ifndef Common_h #define Common_h // iPhone设备及屏幕适配 //4的设备 #define KDevice ...