BFS求四连通块数目

裸BFS的题目。输入是一个n*m的矩阵,矩阵由0-9的数字构成,0表示海水,数字表示陆地,求四连通的陆地块的数目。

今天发现,BFS在遍历到某个结点时,先访问该结点再将邻接点入队和先将邻结点入队再访问该结点没有本质区别。而DFS则需要在某个结点可以深入的结点全部访问完再回溯到该结点时,再对其进行访问。

代码:

// 1329.cpp : 定义控制台应用程序的入口点。
// AC
// BFS求四连通块数目

#include "stdafx.h"
#include <iostream>
#include <deque>
#include <string>

#define MAX 100

using std::cin;
using std::cout;
using std::endl;
using std::cerr;
using std::deque;
using std::string;

struct Point {
	int x;
	int y;
	Point(int _x, int _y) :x(_x), y(_y) {}
};

//将(x,y)当做源点做bfs
void BFS(int a[][MAX], int n, int m, int x, int y,bool visit[][MAX])
{
	deque<Point> Q;
	Q.push_back(Point(x, y)); //初始化队列
	while (!Q.empty())
	{
		Point temp = Q.front();
		Q.pop_front();
		int temp_x = temp.x;
		int temp_y = temp.y;

		visit[temp_x][temp_y] = true; //访问该结点
		
		//所有未访问的邻居结点入队列
		if (temp_x - 1 >= 0 &&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值