首页 > 其他分享 >广度优先搜素 -- 图的遍历

广度优先搜素 -- 图的遍历

时间:2023-02-17 15:07:29浏览次数:32  
标签:map head 遍历 -- int tail book 搜素 顶点


#include <iostream>
#include <algorithm>
using namespace std ;
const int INF = 0x3f3f3f3f ;
const int MAX =100 ;
int n , m ;
int book[MAX]; // 用于标记 是否访问过book[i] i 顶点
int que[MAX] ; // 队列
int map[MAX][MAX] ; // 用一个二维数组来存储图
void init()
{
// 邻接矩阵存储图;
int i ,j ;
for(i=1 ;i<=n;i++)
{
for(j = 1 ; j<=n ;j++)
{
if(i==j)
map[i][j] = 0 ;
else
map[i][j] = INF ;

}

}
int a ,b ;
for(i=1; i<=m;i++)
{
// 写入邻边
cin>>a>>b ;
map[a][b] = 1 ;
map[b][a] = 1 ;
}

return ;
}
int main()
{
int head = 1 ; // 对头
int tail = 1 ; // 队尾
int i ;
cin>>n >>m ;
init();
que[tail] = 1; // 先把 1 这个顶点放入到队列中去 ;
tail++;
book[1] = 1; // 标记第一个顶点已经访问过了

while(head<tail &&tail<=n)
{
int cur = que[head];// 每次都把对列的头赋给cur 作为当前顶点
// 对 1 ~ n 依次遍历;
for(i=1;i<=n ;i++)
{
if(map[cur][i]==1 && book[i]==0)
// 如果cur节点 可以到达 i 节点 并且还没有访问过i
{
// 把它加入到队列中来
que[tail] = i ;
tail++ ;
book[i] = 1 ; // 标记

}

}
if(tail>n)
{
break;
}
head++; // 一定不要忘记
}

for(i=1;i<=n;i++)
{
cout<<que[i]<<" ";
}

return 0;
}

广度优先搜素的主要思想就是: 首先要以一个未被访问的顶点作为起始顶点,访问其相邻的顶点,然后对每一个相邻的顶点,再去访问他们相邻的未被访问的顶点,直到所有的顶点都被访问过;

 que      

        head                                                                                                                                     tail

1

2

3

5

4

0




标签:map,head,遍历,--,int,tail,book,搜素,顶点
From: https://blog.51cto.com/u_15970235/6064095

相关文章

  • 快速幂
    #include<iostream>#include<bits/stdc++.h>usingnamespacestd;//快速幂typedeflonglongLL;constLLmod=1e9+7;//大质数;LLpower(LLa,LLb,LLmod){LLa......
  • 全排列
    #include<iostream>#include<cstdio>usingnamespacestd;//输出全排列constintMAX=1000;inta[MAX];intn;intbook[MAX];voiddfs(intstep){inti;if(step......
  • 如何复制一个java对象(浅克隆与深度克隆)
    在项目中,有时候有一些比较重要的对象经常被当作参数传来传去,和C语言的值传递不同,java语言的传递都是引用传递,在任何一个地方修改了这个对象的值,就会导......
  • Satellite Photographs
       SatellitePhotographsFarmerJohnpurchasedsatellitephotosofWxHpixelsofhisfarm(1<=W<=80,1<=H<=1000)andwishestodeterminethelarges......
  • 图的最小生成树--小白进阶篇
    情景导入:      最近同学小i,我们姑且叫他小i同学,他最近不知道迷上了旅游,常常在夜深人静的时候,突然仰天大笑,”明天我要做个惊天地泣鬼神的决定,我要去旅行“,然后......
  • Drying
    #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;intconstMAX=1000;intconstINF=9999999;intn,k;//wash......
  • 堆-- 神奇的优先队列
    堆是什么?是一种特殊的完全二叉树,就像树一样。有没有发现这棵二叉树有一个特点?就是所有的父节点都比子节点小(PS:就是圆圈的数值,圆圈外面的编号是这个节点的编号,)那么符合这样......
  • 贪心-活动选择
    题目描述: ProblemDescription学校的大学生艺术中心周日将面向全校各个学院的学生社团开放,但活动中心同时只能供一个社团活动使用,并且每一个社团活动开始后都不能中断。现......
  • 基于sysbench-mongodb-lua的mongodb的性能测试
    1.环境准备installsysbenchyuminstallsysbenchinstallmongoroverdriver···yuminstalllibmongoc-devlibbson-devluarocksluarocksinstallmongorover......
  • 素数的埃式筛选法
    constintN=1e7;intprime[N];//第i个素数boolis_prime[N];intsieve(intn){intcnt=0;for(inti=0;i<=n+1;i++){is_prime[i]=true;}is_p......