6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
45 59 6 13
正在看 搜索 简单的搜索题。
DFS :
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define max(a,b)(a>b?a:b)
int m,n,s,t,ans;
int vis[25][25];
char maps[25][25];
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
void DFS(int x, int y)
{
for(int i=0;i<4;i++)
{
int dx=x+dir[i][0];
int dy=y+dir[i][1];
if(x>=0 && y>=0 && x<m && y<n && maps[dx][dy]=='.' && !vis[dx][dy])
{
vis[dx][dy]=1;
ans++;
DFS(dx,dy);
}
}
}
int main()
{
while(scanf("%d%d",&n,&m),n+m)
{
memset(maps,0,sizeof(maps));
for(int i=0;i<m;i++)
{
scanf("%s",maps[i]);
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(maps[i][j]=='@')
{
s=i;
t=j;
}
}
}
memset(vis,0,sizeof(vis));
ans=1;
vis[s][t]=1;
DFS(s,t);
printf("%d\n",ans);
}
return 0;
}
BFS :
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<cctype>
#define max(a,b)(a>b?a:b)
using namespace std;
struct point
{
int x,y;
};
int m,n,s,t,ans;
int vis[25][25];
char maps[25][25];
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
void BFS()
{
queue<point> que;
struct point start;
start.x=s;
start.y=t;
vis[s][t]=1;
que.push(start);
while(!que.empty())
{
struct point u;
u=que.front();
que.pop();
for(int i=0;i<4;i++)
{
int x=u.x+dir[i][0];
int y=u.y+dir[i][1];
if(x<0 || y<0 || x>=m || y>=n || maps[x][y]=='#' || vis[x][y]) continue;
vis[x][y]=1;
ans++;
struct point next;
next.x =x;
next.y =y;
que.push(next);
}
}
}
int main()
{
while(scanf("%d%d",&n,&m),n+m)
{
memset(maps,0,sizeof(maps));
for(int i=0;i<m;i++)
{
scanf("%s",maps[i]);
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(maps[i][j]=='@')
{
s=i;
t=j;
}
}
}
ans=1;
BFS();
memset(vis,0,sizeof(vis));
printf("%d\n",ans);
}
return 0;
}