深度优先搜索
虽然是很简单的一道题目,但是通过自己码出来还是很有成就感的~
POJ 1979
适合入门
#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <string.h>
#include <utility>
#define MAX 25
using namespace std;
typedef pair<int,int> P;
char maze[MAX][MAX];
int W,H;
int sx,sy;
int step=-1;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
//由于题目限制只能上下左右移动,所以不能直接用两个for循环套用
void dfs(int x,int y)
{
step++;
maze[x][y]='#';
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(0<=nx && nx<H && 0<=ny && ny<W && maze[nx][ny]!='#')
{
dfs(nx,ny);
}
}
}
}
int main()
{
while(cin>>W>>H)
{
memset(maze,0,sizeof(maze));
if(W==0&&H==0)
return 0;
step=0;
for(int i=0;i<H;i++)
{
for(int j=0;j<W;j++)
{
cin>>maze[i][j];
if(maze[i][j]=='@')
{
sx=i;sy=j;
}
}
}
dfs(sx,sy);
cout<<step<<endl;
}
return 0;
}