POJ2386
程序员文章站
2022-05-21 11:51:24
...
深搜
#include<stdio.h>
using namespace std;
int dx[8]={0,0,1,-1,1,1,-1,-1};
int dy[8]={1,-1,0,0,1,-1,-1,1};
int n,m;
char s[105][105];
void dfs(int x,int y)
{
s[x][y]='.';
for(int i=0;i<8;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(s[xx][yy]=='W'&&(xx<n)&&(yy<m)&&(xx>=0)&&(yy>=0))
dfs(xx,yy);
}
return;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",s[i]);
int sum=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(s[i][j]=='W')
{
dfs(i,j);
sum++;
}
}
printf("%d\n",sum);
return 0;
}
广搜
#include<stdio.h>
#include<queue>
using namespace std;
int dx[8]={0,0,1,-1,1,1,-1,-1};
int dy[8]={1,-1,0,0,1,-1,-1,1};
int n,m;
char s[105][105];
queue<int>putx;
queue<int>puty;
void bfs(int x,int y)
{
putx.push(x),puty.push(y);
int tx,ty,xx,yy;
s[x][y]='.';
while(!(putx.empty()&&puty.empty()))
{
tx=putx.front(),ty=puty.front();
putx.pop(),puty.pop();
for(int i=0;i<8;i++)
{
xx=tx+dx[i],yy=ty+dy[i];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&s[xx][yy]=='W')
{
putx.push(xx),puty.push(yy);
s[xx][yy]='.';
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",s[i]);
int sum=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(s[i][j]=='W')
{
bfs(i,j);
sum++;
}
}
printf("%d\n",sum);
return 0;
}
上一篇: A - 迷宫问题 保存路径
下一篇: c语言实现顺序结构的存储二叉树堆