hdu 2612 Find a way

yyPurpose 2017-06-27 04:05:11
这是一题广搜题,但是结果却是测试样例过了但是提交却是WA,求大神请教!!!

‘Y’ 代表Y的位置
‘M’ 代表M的位置
‘#’ 代表墙
‘.’ 代表路
‘@’ 代表KCF

找出一条路使得Y和M走到KFC的时间最短(Y和M每走一步耗时11分钟),输出最短时间。

下面是代码:

#include<iostream>
#include<queue>
#include<stdio.h>
#include<string.h>
using namespace std;
int n,m;
int yx,yy;
int mx,my;
int dir[4][2]={0,1,0,-1,1,0,-1,0};
int map[210][210];
int KFC[210][3];
int Knum=0;
int time;
int tt;
queue<int>pointx;
queue<int>pointy;
bool isin(int x,int y)
{
return x>=0&&y>=0&&x<n&&y<m;
}
void bfs(int x,int y)
{
pointx.pop();
pointy.pop();
for(int i=0;i<Knum;i++)
{
if(x==KFC[i][0]&&y==KFC[i][1])
{
KFC[i][2]+=map[x][y]; //记录一个人走到一个KFC所需的时间
tt++;
}
}
if(tt==Knum)
{
map[x][y]=0;
return;
}
int x1,y1,z1;
for(int i=0;i<4;i++) //向四个方向搜索
{
x1=x+dir[i][0];
y1=y+dir[i][1];
if(isin(x1,y1)==true&&map[x1][y1]==0) //达到条件在地图中且未搜索过,则标记并压入队列
{
map[x1][y1]=map[x][y]+1;
pointx.push(x1);
pointy.push(y1);
}
}
if(!pointx.empty()&&!pointy.empty()) //如果队列未空,则继续头元素搜索
bfs(pointx.front(),pointy.front());
map[x][y]=0;
return;
}
int main()
{
char x;
while(cin>>n>>m)
{
memset(map,0,sizeof(map));
memset(KFC,0,sizeof(KFC));
Knum=0;
time=2000000000;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>x;
if(x=='#')map[i][j]=-1;
else if(x=='.')map[i][j]=0;
else if(x=='Y')
{
map[i][j]=1;
yx=i;
yy=j;
}
else if(x=='M')
{
map[i][j]=1;
mx=i;
my=j;
}
else if(x=='@')
{
map[i][j]=0;
KFC[Knum][0]=i;
KFC[Knum][1]=j;
KFC[Knum][2]=0;
Knum++;
}
}
tt=0; //Y先走
pointx.push(yx);
pointy.push(yy);
bfs(pointx.front(),pointy.front());
while(!pointx.empty()) //清空队列
{
map[pointx.front()][pointy.front()]=0;
pointx.pop();
pointy.pop();
}
tt=0; //M后走
pointx.push(mx);
pointy.push(my);
bfs(pointx.front(),pointy.front());
while(!pointx.empty()) //清空队列
{
pointx.pop();
pointy.pop();
}
for(int i=0;i<Knum;i++)
{
if(KFC[i][2]-2<time)
{
time=KFC[i][2]-2;
}
}
cout<<time*11<<endl;
}
}
...全文
176 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-06-30
  • 打赏
  • 举报
回复
边界条件 输入输出格式 ……
yyPurpose 2017-06-29
  • 打赏
  • 举报
回复
确实哦!谢谢大家!不过提交了还是WA,可能还有别的问题吧。。。才刚开始学算法,代码也比较乱。。继续加油!
FancyMouse 2017-06-29
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/392064583 这错误怎么这么容易犯(
赵4老师 2017-06-29
  • 打赏
  • 举报
回复
引用 3 楼 FancyMouse 的回复:
http://bbs.csdn.net/topics/392064583 这错误怎么这么容易犯(
这就是所谓“大众脸坑”!
赵4老师 2017-06-28
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。
yyPurpose 2017-06-28
  • 打赏
  • 举报
回复
可是程序本身没有定义局部的数组变量啊?这是怎么回事?

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧