您的位置:首页 > 其它

POJ 1979 -- DFS

2016-01-28 14:34 363 查看

题意:

在一个图中,从起点(@)开始,不能走红色堆(#),输出能走的最大的黑色堆(.)的个数。(只能上下左右4个方向)

题解

使用dfs进行搜索

代码

#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1000;
int n,m;
char mat[MAXN][MAXN];
int vis[MAXN][MAXN];
int res;
typedef struct
{
int x;
int y;
}Point ;
int direct[4][2]={{-1,0} , {1,0} , {0,-1} , {0,1} };
int dfs(int x, int y)
{

for(int i = 0; i < 4; i++)
{
int dx = x + direct[i][0];
int dy = y + direct[i][1];
if( dx < 0 || dy < 0 || dx >= n || dy >= m)
continue;
if( !vis[dx][dy] && mat[dx][dy] == '.')
{
vis[dx][dy] = 1;
res++;
dfs(dx , dy);
}
}
}
int main()
{

while(cin>>m>>n && n != 0 && m != 0)
{
res = 1;
Point start;

for(int i = 0; i < n; i++)
{
//char temp;
cin>>mat[i];
}
for(int i=0 ;i < n; i++)
{
for(int j = 0; j < m; j++)
{
vis[i][j] = 0;
if(mat[i][j] == '@')
{
start.x=i;
start.y=j;
}
}
}

dfs(start.x, start.y);
cout<<res<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: