一道ACM题,用BFS做,样例一样,可就是wrong answer,求指教 25

这是链接:http://acm.nuc.edu.cn/OJ/problem.php?pid=1215我写的代码:#include"stdio.h"#include"str... 这是链接:http://acm.nuc.edu.cn/OJ/problem.php?pid=1215

我写的代码:
#include "stdio.h"
#include "string.h"
#define M 2002
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
void BFS (int x,int y);
char map[M][M];
int count;
int main ()
{
int n,m,i,j,k,flag;
int x,y;
char c[M];
while (scanf ("%d %d",&n,&m) != EOF)
{
count = 0;
flag = 0;
getchar ();
for (i = 1;i <= n;i ++)
{
gets(c);
k = 0;
j = 1;
while (c[k] != '\0')
{
map[i][j++] = c[k++];
}
memset (c,'\0',sizeof(c));
}
for (i = 0;i <=n+1;i ++)
{
for (j =0;j <= m+1;j ++)
if (i==0||j==0||i==n+1||j==m+1)
map[i][j] = '#';
}

for (i = 1;i <= n;i ++)
{
for (j = 1;j <= m;j ++)
{
if (map[i][j] == 'X')
{
x = i;
y = j;
flag = 1;
break;
}
}
if (flag) break;
}

BFS(x,y);
printf ("%d\n",count);
memset (map,'\0',sizeof(map));
}
return 0;
}

void BFS (int x,int y)
{
int X,Y,i;
if (map[x][y] == '*')
count ++;
if (map[x][y] == '#')
return ;
map[x][y] = '1';
for (i = 0;i < 4;i ++)
{
X = x + dx[i];
Y = y + dy[i];
if (map[X][Y] == '#'||map[X][Y]== '1') continue;
else
BFS (X,Y);
}
}
请教牛人指教,谢谢啦
Description:
keefo 正在一个迷宫里找宝藏. keefo好不容易找到这个迷宫,这个迷宫传说中藏了不少的宝藏,当然他希望这次能够找出所所有的宝藏. 现在,他已经从杨过那里获得宝藏地图, 现在 keefo 想知道他能够获得多少宝藏.keefo 希望你能够帮他解决这个问题(呵呵~,不是白干哦, keefo会付给你酬金).

现在假设,迷宫是由正方形网格组成 . keefo在迷宫中,只能从 上 ,下,左,右四个方向移动. 但是如果他要走的前方是一堵墙的话,他将不能走过去. 并且,迷宫的四周都是由一堵厚实的墙包围着, 也就是说,keefo不可能走出迷宫之外.

Input:
输入包含多组测试数据.

每组测试数据第一行包含两个整形数字, N 和 M ( 1 < N,M <= 1000 ), 分别表示迷宫网格的行和列.接下来N行里,每行包含了M个字符.( ´X´ 代表 keefo 当前位置 , ´*´ 代表宝藏 , ´#´代表墙, ´.´ 代表没有任何障碍 ). 每个测试数据只包含一个 ´X´ 字符.

Output:
输出keefo 能够找到的最多宝藏的个数.

每组数据一行.

Example Input:
4 4
*...
.X..
....
...*

4 4
*#..
#X..
....
...*Example Output:
2
1
展开
 我来答
红舞天香
2011-07-10 · TA获得超过417个赞
知道答主
回答量:180
采纳率:0%
帮助的人:236万
展开全部
给100分帮你做
追问
不用了,我懂了,是栈溢出的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式