DFS基础题。只走黑色的格子,一个格子可以走多次。求有多少个黑色格子可以走到。只需使用DFS搜索,看看有多少格子可以搜索到即可。vis数组表示格子是否已经被搜索到。当然用BFS也可。注意起始点也是一个黑色格子,不要遗漏。
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int ans,x,y;
int vis[25][25];
char m[25][25];
int dir[4][2]={0,1,0,-1,1,0,-1,0};
int BFS(int x1,int y1)
{
int nx,ny;
for(int i=0;i<4;i++)
{
nx=x1+dir[i][0];
ny=y1+dir[i][1];
if(nx<0||nx>=x||ny<0||ny>=y)
continue;
if(m[nx][ny]!='#'&&!vis[nx][ny])
{
vis[nx][ny]=1;
ans++;
BFS(nx,ny);
}
}
return 0;
}
int main()
{
while(~scanf("%d%d",&y,&x)&&x&&y)
{
int sti=0,stj=0;
ans=1;
memset(vis, 0, sizeof(vis));
getchar();
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
scanf("%c",&m[i][j]);
if(m[i][j]=='@')
sti=i,stj=j;
}
getchar();
}
vis[sti][stj]=1;
BFS(sti, stj);
printf("%d\n",ans);
}
return 0;
}
本文介绍了一个迷宫寻路问题,通过深度优先搜索(DFS)算法解决了一个站在黑色方块上的人如何遍历所有可达的黑色方块的问题。文章提供了完整的代码实现,并在NBUToj平台上验证了其正确性。

1433

被折叠的 条评论
为什么被折叠?



