day8-图的遍历方式

本文详细介绍了图的两种基本遍历算法——深度优先遍历(DFS)与广度优先遍历(BFS)。深度优先遍历通过递归的方式深入图的每一个分支,直至无法前进为止;广度优先遍历则采用队列实现,从根节点开始逐层遍历图的每个层级。文章提供了这两种算法的C++实现代码,并解释了它们的工作原理。

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

ACM13

1.    图

存储方式

邻接矩阵

特点:存储空间大小为n*n,耗费空间大;1表示两顶点之间有链接,0表示无链接;

邻接表

特点:存储空间为n+2e,存储空间随时分配,所需时间长,以时间换空间;

遍历方式

<1>深度优先遍历

本质:实质上是利用栈,运用递归,遍历出各顶点的值;

效果:先找到第一个顶点,再找到顶点的邻点,类推,

一直向深度延伸,只有无路可走时,return;递归回去;

(就想一个倔强的孩子,只要有路,一直向前冲,不到死路不回头)

框架:

#include<cstdio>

#include<string.h>

const int MAX=10;

int map[MAX][MAX];

int vis[MAX];

int a[MAX];

int i,j,sum=0;

void dfs(int v)

{

    vis[v]=1;//给第一个顶点标记

    sum++;//统计已走过的顶点数

    if(sum==MAX)

        return ;

    for(i=1;i<=MAX;i++)

    {

        if(map[v][i]==1&&!vis[i])//寻找未被走过的顶点且与顶点有连接的点

        {

            vis[i]=1;//给新点一个标记

            dfs(i);//查找与该点相连的点,有继续找,直到没有与该顶点相连的点或已经走过了所有的顶点后,跳出循环,递归回去;

        }

    }

        return ;

}

int main()

{

    memset(vis,0,sizeof(vis));

    for(i=0;i<MAX;i++)

    {

        for(j=0;j<MAX;j++)

        {

        map[i][j]//地图编写;

       }

    }

}

<2>广度优先遍历

本质:运用队列,遍历出各顶点的值;

思路:类似于层次树,首先找到一个顶点,找到它的相邻顶点,让邻点入队,然后此顶点出队;

框架:

#include<stdio.h>

#include<queue>

using namespace std;

int map[100][100];

bool vis[100]={false};

queue<int>s;

void bfs(int v)

{

    vis[v]=1;

    for(int i=0;i<=100;i++)

    {

      if(map[v][i]==1&&!vis[i])

      {

          s.push(i);

          vis[i]=1;

      }

    }

    s.pop();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值