谁能解释这个BFS代码是如何工作的?

问题描述 投票:0回答:1

我是算法和数据结构的新手。这段代码来自我错过的课程,现在我很难理解这一点。当我要求初始顶点后,我不明白发生了什么。下面是代码

#include<iostream>

#include<conio.h>

#include<stdlib.h>

using namespace std;
int i, j, k, e, n, f, r, v, c[10][10], q[10], visit[10], visited[10];
int main() {
  //clrscr();
  cout << "Enter number of nodes: ";
  cin >> n;
  cout << "Enter number of edges: ";
  cin >> e;
  cout << "enter edge details";
  for (k = 1; k <= e; k++) {
    cin >> i >> j;
    c[i][j] = 1;

  }
  cout << "enter initials vertex:";
  cin >> v;
  cout << "\n visited vertices are:" << v << "";
  visited[v] = 1;
  k = 1;
  while (k < n) {
    for (j = 1; j <= n; j++)
      if ((c[v][j] != 0) && (visited[j] != 1) && (visit[j] != 1)) {
        visit[j] = 1;
        q[r++] = j;
      }
    v = q[f++];
    cout << v << "";
    k++;
    visit[v] = 0;
    visited[v] = 1;
  }
}
c++ algorithm breadth-first-search
1个回答
0
投票
front指向f(从中提取值),队列的

rear指向r(向其中添加新值)队列)。

队列首先为空,并且当前顶点v的邻居被添加到队列中(在其“后”侧)。当顶点在队列中时,其visit[v]设置为1,否则为0。这是为了防止将同一顶点两次添加到队列中。]从队列的最前面拉出下一个顶点。现在将其视为已访问,因此visited[v]现在设置为1,并且visit[v]被清除(这有点过大,但是可以)。再次,这防止了顶点仅被访问(和输出)一次。

通过使用队列,我们​​确保以从顶点到顶点的距离(以边数表示)访问顶点。

由于存在n个顶点,它们都将由已迭代n次的外循环访问。这就是k的价值。

© www.soinside.com 2019 - 2024. All rights reserved.