Red and Black
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1312
解题思路:
暴力直接搜就可以了,走过的地方标记一下就行了。。。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct node{
int x,y;
}no[450];
const int dx[] = {-1,0,1,0},dy[] = {0,-1,0,1};
int n,m;
char maze[22][22];
int vis[22][22];
int cnt;
void bfs(int i,int j){
memset(vis,0,sizeof(vis));
queue<node> q;
node cur;
cur.x = i;cur.y = j;
vis[i][j] = 1;
q.push(cur);
while(!q.empty()){
cur = q.front();
q.pop();
cnt++;
for(int i = 0; i < 4; i++){
int xx = cur.x+dx[i],yy = cur.y+dy[i];
if(xx<0 || xx >= m || yy<0 || yy >= n || maze[xx][yy] == '#' || vis[xx][yy])
continue;
node tmp;
tmp.x = xx;tmp.y = yy;
vis[xx][yy] = 1;
q.push(tmp);
}
/*for(int i = 0; i < m; i++)
printf("%s\n",maze[i]);
cout<<endl;*/
}
}
int main(){
while(scanf("%d%d",&n,&m),n+m){
cnt = 0;
for(int i = 0; i < m; i++)
scanf("%s",maze[i]);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++){
if(maze[i][j] == '@'){
bfs(i,j);
break;
}
}
printf("%d\n",cnt);
}
return 0;
}