【算法】图的广度优先算法

你的名字 2022-06-13 03:23 241阅读 0赞

图就是由一些小圆点(称为顶点)和连接这些小圆点的直线(称为变)组成的。

例如,下面的图:

Center

上图就是由五个顶点(编号为1,2,3,4,5)和5条边(1-2,1-3,1-5,2-4,3-5)组成。

广度优先算法的主要思想是:首先以一个未被访问过的顶点,访问其所有相邻的顶点

然后对每个相邻的顶点,再访问它们相邻的未被访问过的顶点,直到所有顶点都被访问过,遍历结束。

代码的实现:

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. int main()
  5. {
  6. int i, j, n, m, a, b, cur, arr1[101] = { 0 }, arr2[101][101];
  7. int que[10001], head;
  8. int tail = 0;
  9. printf("请输入矩阵的行和列->\n");
  10. scanf("%d %d", &n, &m);
  11. for (i = 1; i <= n; i++)
  12. {
  13. for (j = 1; j <= n; j++)
  14. {
  15. if (i == j)
  16. {
  17. arr2[i][j] = 0;
  18. }
  19. else
  20. {
  21. arr2[i][j] = 99999999;
  22. }
  23. }
  24. }
  25. for (i = 1; i <= m; i++)
  26. {
  27. scanf("%d %d", &a, &b);
  28. arr2[a][b] = 1;
  29. arr2[b][a] = 1;
  30. }
  31. head = 1;
  32. tail = 1;
  33. que[tail] = 1;
  34. tail++;
  35. arr1[1] = 1;
  36. while (head < tail)
  37. {
  38. cur = que[head];
  39. for (i = 1; i <= n; i++)
  40. {
  41. if (arr2[cur][i] == 1 && arr1[i] == 0)
  42. {
  43. que[tail] = i;
  44. tail++;
  45. arr1[i] = 1;
  46. }
  47. if (tail > n)
  48. {
  49. break;
  50. }
  51. }
  52. head++;
  53. }
  54. printf("进行广度优先搜索遍历之后的结果为->\n");
  55. for (i = 1; i < tail; i++)
  56. {
  57. printf("%d ", que[i]);
  58. }
  59. printf("\n");
  60. system("pause");
  61. return 0;
  62. }

运行的结果:

Center 1

Center 2

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读