队列版ac代码:
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <string>
#include <queue>
using namespace std;
char chart[22][22];
int dis[4][2]={0, 1, 0, -1, 1, 0, -1, 0};
struct node{
int x;
int y;
node(int x=0, int y=0):x(x), y(y){}
};
void bfs(int x, int y, int &ans, int m_x, int m_y){
queue<node> point;
point.push(node(x,y));
chart[x][y]='#';
++ans;
int x1=0, y1=0;
while(!point.empty()){
node a=point.front();
point.pop();
for(int i=0; i<4; ++i){
x1 = a.x+dis[i][0];
y1 = a.y+dis[i][1];
if(x1>=0 && x1<m_x && y1>=0 && y1<m_y && chart[x1][y1]=='.'){
point.push(node(x1,y1));
chart[x1][y1]='#';
++ans;
}
}
}
}
int main(){
int w=0, h=0, dx=0, dy=0;
string str;
while(cin >> w >> h){
if(!w && !h)
break;
for(int i=0; i<h; ++i){
cin >> str;
for(int j=0; j<w; ++j){
chart[i][j] = str[j];
if(str[j]=='@'){ //x表示行坐标,y表示列坐标
dx=i;
dy=j;
}
}
}
int ans=0;
bfs(dx, dy, ans, h, w);
cout << ans << endl;
}
}