关于杭电一题搜索题目,很困扰
杭电OJhttp://acm.hdu.我用的广度优先遍历。。这种搜索要用一个数组来标记访问过的吗,我前天刚做了题没用提交成功了,今天交了内存超了,于是我就加了标记数组,可是就错了,我做过的几题广搜的都是一加这个就错,所以我都没用标记数组,下面是我的代码我把标记数组注释了,有人指点下该怎么加吗,我错在哪里#include<iostream>
#include<queue>
using namespace std;
struct elem
{
int x,y;
int cost;
};
char map[50][50],visit[50][50];
int n,m,dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int bound(int x,int y)
{
if(x>=1 && y>=1 &&x<=n && y<=m)
return 1;
else
return 0;
}
int bfs(int x,int y)
{
queue<elem>q; elem a,b;
while(!q.empty()) q.pop();
a.x=x;
a.y=y;
a.cost=0;
q.push(a);
//visit[x][y]=1;
while(!q.empty())
{
b=q.front();
q.pop();
for(int i=0;i<4;i++)
{
a.x=b.x+dir[i][0];
a.y=b.y+dir[i][1];
a.cost=b.cost+1;
if(bound(a.x,a.y) && map[a.x][a.y]!='#' /*&& !visit[a.x][a.y]*/)
{
//visit[a.x][a.y]=1;
if(map[a.x][a.y]=='r')
return a.cost;
else if(map[a.x][a.y]=='x')
a.cost++;
q.push(a);
}
}
}
return -1;
}
int main()
{
int x,y;
while(cin>>n>>m)
{
memset(visit,0,sizeof(visit));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>map[i][j];
if(map[i][j]=='a')
{x=i;y=j;}
}
if(bfs(x,y)!=-1)
cout<<bfs(x,y)<<endl;
else
cout<<"Poor ANGEL has to stay in the prison all his life.";
}
return 0;
}
希望大家给点帮助