题目描述:
这间长方形客房铺有方形瓷砖。每个瓷砖都是红色或黑色。一个男人站在黑色的瓷砖上。从瓷砖中,他可以移动到四个相邻瓷砖中的一个。但他不能在红瓦上移动,他只能在黑色瓷砖上移动。
编写一个程序,通过重复上述动作来计算他可以达到的黑色瓷砖的数量。
输入格式:
输入由多个数据集组成。数据集以包含两个正整数W和H的行开始; W和H分别是x和y方向上的瓦片数量。W和H不超过20.
数据集中还有H行,每行包含W个字符。每个字符代表一个图块的颜色,如下所示。
’ . ’ - 黑色瓷砖
‘#’ - 红色瓷砖
‘@’ - 黑色瓷砖上的男人(在数据集中只显示一次)
当遇到W和H为0的时候,代表输入数据结束。
输出格式:
对于每个数据集,您的程序应输出一行,其中包含他可以从初始图块(包括其自身)到达的图块数量。
#include<bits/stdc++.h>
using namespace std;
int dx={-1,1,0,0};
int dy={0,0,-1,1};//偏移量数组
char mp[30][30];//迷宫地图
int vis[30][30]={0},t=0;//标记迷宫每个点是否走过
int n,m,cnt,A,B,c=1;
void dfs(int x,int y);
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];//输入构建地图
if(mp[i][j]==‘@’){//是起点
A=i;
B=j;
}
}
}
vis[A][B]=1;//标记起点
dfs(A,B);//从起点A,B开始搜索
cout<<c;//搜索结束,输出方案数
return 0;
}
void dfs(int x,int y)//洪水填充
{//当前所在的位置坐标
cnt++;
for(int i=0;i<4;i++)//遍历4个方向
{//计算新坐标
int nx=x+dx[i];
int ny=y+dy[i];
if(nx<1||nx>n||ny<1||ny>m||mp[nx][ny]==‘#’||vis[nx][ny]){
continue;
}
c++;
vis[nx][ny]=1;
dfs(nx,ny);
}
}
wa50分
哪错了?