题目链接 : http://poj.org/problem?id=1321
DFS&BFS入门
Red and Black
#include <iostream>
#include <map>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <set>
using namespace std;
/*struct st
{
int a,b,c,d,e;
int sum;
} m[100001];
bool cmp(st x,st y)
{
if(x.d!=y.d)
return x.d>y.d;
else
return x.e<y.e;
}*/
int n,m,w=1;
char a[1001][1001];
int dx[4]= {-1,0,0,1};
int dy[4]= {0,-1,1,0};
void dfs(int i,int j)
{
int ii, jj, k;
for(int k = 0; k < 4; k++)
{
ii = i + dx[k];
jj = j + dy[k];
if(ii > -1 && jj > -1 && ii < m && jj < n&& a[ii][jj] == '.')//找出范围
{
w++;//开始计数
a[ii][jj] = '#';
dfs(ii, jj);
}
}
}
int main()
{ int r,l;
while(cin>>n>>m)
{ w=1;
int sum=0;
if(n==0&&m==0)
break;
else
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin>>a[i][j];
}
}
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
if(a[i][j]=='@')
{
r=i;
l=j;
i=m;//令第一个循环结束
break;
}
}
}
}
dfs(r, l);
cout<<w<<endl;
}
return 0;
}