第一篇博客,写什么呢
就连通块吧!
选一道例题:https://www.luogu.org/problem/show?pid=1454
圣诞夜的极光
侵删
当然是DFS啦,dfs求连通块是最好的,思路就是先填第一个点,接着按一定的顺序向周围扩散,如果已被搜索过或以到达边界就不搜
也可以用来求迷宫中的两点是否联通
Cpp题解如下(已AC):
#include<iostream>
#include<cstring>
using namespace std;
char a[105][105];
bool s[105][105];//s为判断是否走过
int n,m;
int cnt=0;
void dfs(int x,int y)
{
if(x>n||y>m)
return;
if(s[x][y]==1)
return;
if(a[x][y]!='#')
return;
s[x][y]=1;
dfs(x,y+2);
dfs(x-1,y+1);
dfs(x,y+1);
dfs(x+1,y+1);
dfs(x-2,y);
dfs(x-1,y);
dfs(x+1,y);
dfs(x+2,y);
dfs(x-1,y-1);
dfs(x,y-1);
dfs(x+1,y-1);
dfs(x,y-2);
}
int main()
{
memset(s,0,sizeof(s));
memset(a,0,sizeof(a));
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(s[i][j]==0&&a[i][j]=='#')
{
dfs(i,j);
cnt++;
}
}
}
cout<<cnt;
return 0;
}