HDU1241 求联通块个数(DFS)

每日打卡(1/1)

传送门:点击打开链接

题目大意:

      求联通块个数

思路:

      把n*m的图完整遍历一遍,如果遇到一个点是@,那么就搜索当前点,将和其所有联通的点全部改为‘*’,并且总数+1,然后就求出了联通块的个数。

代码:

#include
#include
#include
#include
#include
using namespace std;
const int maxn = 105;

char s[maxn][maxn];
int n,m,ans,dir[8][2]={1,0,-1,0,0,1,0,-1,-1,1,-1,-1,1,1,1,-1};
bool vis[maxn][maxn];

void init()
{
	memset(vis,0,sizeof(vis));
	ans = 0;
}

void dfs(int x,int y)
{
	if(x==n&&y==m) {
		return;
	}
	for(int i=0;i<8;i++)
	{
		int newx = x+dir[i][0];
		int newy = y+dir[i][1];
		if(s[newx][newy]=='@'&&newx>=0&&newx=0&&newy

你可能感兴趣的:(暴力,搜索与递归)