是这样的,昨天看到某位大_佬回复了我,非常感激!照着他的写法,我换了一种写法,但是出BUG了!望有人可以找出我的错误,谢谢!
题目描述
猪猪学校的草坪是长方形的,地上有的格子铺着草,有些格子则是小花。佩奇站在其中一格草地上,他只能向相邻的铺着草的格子移动,不能走到有小花的格子上。
请编写一个程序,计算佩奇能够到达的格子的数量。
输入格式
共 k+1 行,
第一行是两个整数 n 和 k ,分别表示草地的宽度和高度。
在接下来的 k行中,每行包括 n 个字符。每个字符表示当前格子的植物,规则如下
1).:草地格子;
2)#:鲜花格子;
3)@:草地格子,并且佩奇一开始站在这个格子上,全图只有一个。
输出格式
一个整数,表示佩奇能到达的格子数量(包括一开始的那格)。
样例输入
6 9
....#.
.....#
......
......
......
......
......
.#..#.
样例输出
45
样例分析
如上所述。
数据范围 1≤n,k≤20 。
下面是我的错误代码
#include<bits/stdc++.h>
using namespace std;
const int dx[4]={-1,0,1,0};
const int dy[4]={0,-1,0,1};
const int N=30;
char s[N][N];
int q[1007][2];
int n,m,x,y,sx,sy,nx,ny,cnt=1,h=1,t=0;
int main()
{
cin>>m>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>s[i][j];
if(s[i][j]='@')
{
sx=i;
sy=j;
}
}
}
q[++t][0]=sx;
q[t][1]=sy;
s[sx][sy]='#';
while(h<=t)
{
x=q[h][0];
y=q[h][1];
h++;
for(int i=0;i<4;i++)
{
nx=x+dx[i];
ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[nx][ny]=='.')
{
s[nx][ny]='#';
q[++t][0]=nx;
q[t][1]=ny;
cnt++;
}
}
}
cout<<cnt;
return 0;
}