計蒜客 踏青 DFS orBFS

方法1:BFS

#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
char matrix[110][110];
bool inq[110][110] = {false};
struct Node{
	int x,y;
}node;
int n,m;
int X[4] = {0,0,-1,1};
int Y[4] = {1,-1,0,0};
void BFS(int x,int y){
	queue<Node> q;
	node.x = x;
	node.y = y;
	q.push(node);
	while(!q.empty()){
		Node f = q.front();
		q.pop();
		for(int i=0;i<4;i++){
			node.x = f.x + X[i];
			node.y = f.y + Y[i];
			if(node.x>=0&&node.x<n&&node.y>=0&&node.y<m&&matrix[node.x][node.y]=='#'&&inq[node.x][node.y]==false){
				q.push(node);
				inq[node.x][node.y] = true;
			}
		}
	}
}
int main(){
	int ans = 0;
	//freopen("in.txt","r",stdin);
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>matrix[i][j];
		}
	}
	for(int i = 0;i<n;i++){
		for(int j=0;j<m;j++){
			if(matrix[i][j]=='#'&&inq[i][j]==false){
				ans++;
				BFS(i,j);
			}
		}
	}
	cout<<ans<<'\n';
	return 0;
} 

方法2:DFS

#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
char matrix[110][110];
bool f[110][110] = {false};
struct Node{
	int x,y;
}node;
int n,m;
int X[4] = {0,0,-1,1};
int Y[4] = {1,-1,0,0};
void DFS(int x,int y){
	for(int i =0;i<4;i++){
		int x1 = x + X[i];
		int y1 = y + Y[i];
		if(x1>=0&&x1<n&&y1>=0&&y1<m&&matrix[x1][y1]=='#'&&f[x1][y1] == false){
			f[x1][y1] = true;
			DFS(x1,y1);
		}
	}
}
int main(){
	int ans = 0;
	//freopen("in.txt","r",stdin);
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>matrix[i][j];
		}
	}
	for(int i = 0;i<n;i++){
		for(int j=0;j<m;j++){
			if(matrix[i][j]=='#'&&f[i][j]==false){
				ans++;
				f[i][j] = true;
				DFS(i,j);
			}
		}
	}
	cout<<ans<<'\n';
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章