| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 277 人关注过本帖
标题:关于杭电一题搜索题目,很困扰
只看楼主 加入收藏
wu3097857312
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-8-14
结帖率:75%
收藏
 问题点数:0 回复次数:0 
关于杭电一题搜索题目,很困扰
杭电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;
}
希望大家给点帮助
搜索更多相关主题的帖子: include 
2012-10-04 10:35
快速回复:关于杭电一题搜索题目,很困扰
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011849 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved