广度优先搜索(BFS)

      广度优先搜索是一种用于图以及树数据结构中的算法,用于遍历或搜索节点。该算法从根节点(或开始节点)开始,依次访问其所有相邻的节点,然后再访问这些相邻节点的相邻节点,以此类推。BFS 使用队列(Queue)数据结构来存储待访问节点。

 

       广度优先搜索的基本思想是,首先访问根节点,然后将根节点的所有相邻节点加入到队列中。然后依次从队列中取出每个节点,访问该节点,并将其未访问过的相邻节点加入到队列末尾。这样可以保证按照层级依次遍历图或树的节点,即先访问离根节点最近的节点,再访问离根节点更远的节点。

9d93b949608f459a8e3b5593a1c1f2e3.jpg

 

例如如同二叉树,使用广度优先搜索将先从根节点出发,按照层次一层一层进行遍历。从1出发1--2--3--4--5--6--7

 

      BFS 使用队列的先进先出(FIFO)特性,确保了树或图的层级遍历顺序。这意味着在同一层级上的节点会在较远层级的节点之前被访问到。BFS 应用广泛,例如最短路径问题、查找最近邻居等。

 

如下C语言举例

void BFS(int graph[MAX_NODES][MAX_NODES], int start, int n) {

  int visited[MAX_NODES] = {0};

  int queue[MAX_NODES];

  int front = 0, rear = 0;

  visited[start] = 1;

  queue[rear++] = start;

  while (front < rear) {

     int current = queue[front++];

     printf("%d ", current);

     for (int i = 0; i < n; i++) {

          if (graph[current][i] && !visited[i]) {

         visited[i] = 1;

         queue[rear++] = i;

         }

    }

  }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值