您的位置:首页 > 其它

[kuangbin带你飞]专题一 简单搜索 L HDU 1241

2016-09-19 21:48 351 查看
题目地址:https://vjudge.net/contest/65959#problem/L

思路:判断有多少个联通快。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int maxn=100+10;
char g[maxn][maxn];
bool vis[maxn][maxn];
int m,n;
int xx[8]={-1,-1,-1,0,0,1,1,1};
int yy[8]={-1,0,1,-1,1,-1,0,1};

void dfs(int x,int y)
{
vis[x][y]=true;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
int ii=x+xx[i],jj=y+yy[i];
if(ii<0 || ii>=m ||jj<0||jj>=n)
continue;
if(!vis[ii][jj] && g[ii][jj]=='@')
dfs(ii,jj);
}
return;
}

int main()
{
while(scanf("%d%d",&m,&n) && (n || m))
{
for(int i=0;i<m;i++)
scanf("%s",g[i]);
memset(vis,false,sizeof(vis));
int ans=0;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(!vis[i][j] && g[i][j]=='@')
{
dfs(i,j);
ans++;
}
}
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: