AC代码
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
const int N = 55;
///全局变量
int h,w,res; ///行数,列数,数量
int matrix[N][N]; ///邻接矩阵
bool visit[N][N];
int dr[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void DFS(int x,int y){
visit[x][y]=true;
++res;
for(int i=0;i<4;++i){
int x1=x+dr[i][0],y1=y+dr[i][1];
if(x1<0 || x1>=h || y1<0 || y1>=w || visit[x1][y1] || matrix[x1][y1]==1){ ///下个位置不可去
continue;
}
else{
DFS(x1,y1);
}
}
}
int main(){
while(cin>>w>>h && (w!=0||h!=0)){
char c;
int x,y;
res=0;
memset(visit,false,sizeof(visit)); ///初始化visit数组
for(int i=0;i<h;++i){ ///存图
for(int j=0;j<w;++j){
cin>>c;
if(c=='.')
matrix[i][j]=0;
else if(c=='#')
matrix[i][j]=1;
else if(c=='@'){ ///找到起始坐标
matrix[i][j]=0;
x=i;y=j;
}
}
}
DFS(x,y);
cout<<res<<endl;
}
return 0;
}
心得
经典、基础的网格图的DFS、BFS满贯搜索,这里用的是DFS,因为用的递归逻辑和代码简单(注意DFS在某些oj某些题会爆栈的情况),之前准备初试的时候这种代码没少写,但是在oj上写起来感觉又有不同,还是要多练
相关题目
AC题库里搜flood fill