您的位置:首页 > 其它

HDU 1312 Red and Black(简单搜索)

2016-03-03 14:14 459 查看
本题的题意为:给出一个@代表开始出发的点,#代表墙,遇到墙当然就不能走了,让你求可以活动的范围为多少,看完这些我想你应该知道这是一道简单的搜索题目。。。

下面是本渣渣的AC代码。。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

int n,m,sum;
char a[25][25];
int dir[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
int sx,sy;
int book[50][50]={0};

void dfs(int x,int y)
{
int i;
book[x][y]=1;
for(i=0; i<4; i++)
{
int fx=x+dir[i][0];
int fy=y+dir[i][1];
if(fx<1||fx>n||fy<1||book[fx][fy]==1||fy>m||a[fx][fy]=='#')
continue;
else sum++;
a[fx][fy]=1;
dfs(fx,fy);
}
}

int main()
{
while(cin>>m>>n)
{
if(m==0&&n==0)
break;
memset(book,0,sizeof(book));
sum=0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin>>a[i][j];
if(a[i][j]=='@')
{
sx=i;
sy=j;
}
}
}
dfs(sx,sy);
cout<<sum+1<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: