题目
注意多组输入,要清空数组和计数置零
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cstring>
using namespace std;
char arr[23][23];
int x,y,cnt;
void dfs(int u,int v){
if(u<0||u>=x||v<0||v>=y||arr[u][v]=='#') return;
arr[u][v]='#';
cnt++;
dfs(u,v-1);
dfs(u,v+1);
dfs(u-1,v);
dfs(u+1,v);
}
int main(){
while(scanf("%d%d",&y,&x)!=EOF){
if(x==0&&y==0) break;
cnt=0;
memset(arr,0,sizeof(arr));
int starti=0,startj=0;
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
cin>>arr[i][j];
if(arr[i][j]=='@'){
starti=i;
startj=j;
}
}
}
dfs(starti,startj);
cout<<cnt<<endl;
}
return 0;
}
又一版本
//需要注意的问题,读入字符时,要注意用getchar清除掉换行符
//#include<bits/stdc++.h> //重大OJ不能使用万能头文件
#include<cstdio>
#include<cstring>
using namespace std;
char matrix[25][25];
int m,n;
int dfs(int x, int y){
if(x<0||x>=m||y<0||y>=n||matrix[x][y]=='#') return 0;
matrix[x][y]='#';
return 1+dfs(x+1,y)+dfs(x-1,y)+dfs(x,y+1)+dfs(x,y-1);
}
int main(){
while(scanf("%d%d",&n,&m)){ //m和n是反着写的
if(m==0&&n==0) return 0;
int a,b;
memset(matrix,0,sizeof(matrix));
getchar();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf("%c",&matrix[i][j]);
if(matrix[i][j]=='@'){
a=i;
b=j;
matrix[i][j]='.';
}
}
getchar();
}
printf("%d\n",dfs(a,b));
}
return 0;
}