深搜广搜(来自耿国华等编著数据结构)

本文详细介绍了深度优先搜索(DFS)和广度优先搜索(BFS)的基本思想和算法流程。DFS首先访问某顶点,然后递归访问其未被访问的邻接点,直至所有联通子图的顶点都被访问。BFS则从一个顶点开始,按顺序访问其未被访问的邻接点,并确保访问顺序的正确性,直至所有顶点都被访问。若图中存在未访问顶点,需选择新的起点重复搜索过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度优先搜索的基本思想:

1.从图中某ge'd个顶点V0出发,首先访问V0.

2.找出刚访问过的顶点的第一个未被访问的邻接顶点,然后访问该顶点。以该顶点为新顶点,重复此步骤,直至刚访问过的顶点没有未被访问的邻接点为止。

3.返回前一个fang访问过的且仍有未被访问的邻接点的顶点,找出gai'该顶点的下一个未被访问的邻接点,访问该顶点,然后执行步骤       2.

算法思想:

首先shi'实现对V0所在联通子图的shen深度优先搜索,yong用递归算法实现

1.fang访问出发点V0;

2.yi'c依次以v0的未被访问的邻接点为出发点,深度优先搜索图,直至图中所有与V0有路径相通的顶点都被访问。

若是非连通图,则图中一定还有顶点未被访问,需要从途中另选一个未被访问的顶点作为起点,重复上述深度优先搜索过程。

#include <stdio.h>
#include <string.h>
int ans, temp, n, map[55][55], vis[55];
void dfs(int l)
{
    ans++;
    if (ans > n)
    {
        temp = 1;
        return ;
    }
    vis[l] = 1;
    printf("%d ", l);
    for (int i = 0; i < n; i++)
    {
        if (map[l][i] && !vis[i])//map[l][i]为真代表i是l的邻接顶点
        {
            dfs(i);
            if (temp)
                return ;
        }
    }
}
int main()
{
    while (~scanf("%d", &n))
    {
        temp = ans = 0;
        memset(vis, 0, sizeof(vis));
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                scanf("%d", &map[i][j]);
        }
        for (int i = 0; i < n; i++)
        {
            if (!vis[i])
                dfs(i);
        }
        puts("");
    }
    return 0;
}

广度优先搜索的基本思想:

1.从图中某个定=顶点V0出发,首先访问V0;

2.依次访问V0的各个未被访问de'l的邻接点。

3.分别从这些邻接点(端点)出发,依次访问他们的ge'g各个未被访问的邻接点(新的端结点)。访问时应保证:如果Vi和Vk为当前端结点,且Vi在Vk之前被访问,则Vi的所有未被访问的邻接点应在Vk的所有未被访问的邻接点之前访问。重复3,直到所有端结点均没有未被访问的邻接点为止。

若此时还有顶点未顶点未被访问,则选一个未被访问的ding顶点作为起点,重复上述过程。

算法思想:

1.首先访问V0并置访问标志,然后将V0入队;

2.只要队不空,则重复下述处理:

a.队头结点V出队;

b.对所有的邻接点W,如果W未被访问,则访问W并置访问标志,然后将W入队.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值