广度优先搜索(BFS)求连通块数

#include 
#include 
#include 
#include 
using namespace std;

const int maxn=110;
int m,n;//n代表列数,m代表行数
int num[maxn][maxn];
bool inq[maxn][maxn];
int X[4]={0,0,1,-1};
int Y[4]={1,-1,0,0};
int ans=0;

struct node{
	int x;
	int y;
};

bool judge(int x,int y){
	if(x>=m || x<0 || y>=n || y<0){
		return false;
	}
	if(inq[x][y]){
		return false;
	}
	if(num[x][y]==0){
		return false;
	}
	return true;
}

void BFS(node Node){
	node temp;
	queue q;
	q.push(Node);
	inq[Node.x][Node.y]=true;

	while(!q.empty()){
		node now=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			if(judge(now.x+X[i],now.y+Y[i])){
			    temp.x=now.x+X[i];
			    temp.y=now.y+Y[i];
			    q.push(temp);
				inq[temp.x][temp.y]=true;
			}
		}
	}
}

int main(){
	for(int i=0;i

 

你可能感兴趣的:(算法)