hdoj 1728(bfs+hash)(修复原版的bug)(重要)(调试的问题多就重新书写)
2012-03-04 15:17
246 查看
#include<iostream> #include<stdio.h> #include<queue> using namespace std; #define MAX 105 const int dir[4][2]={{0,-1},{1,0},{0,1},{-1,0}}; class Node { public: int row,col,dir,cost; }; int Row,Col;int startrow;int startcol;int endrow;int endcol; const int lcost=1;const int rcost=1; int k;//最大转弯次数 int result;//结果, int mark[MAX][MAX][4]; char map[MAX][MAX]; queue<Node> q; void check(Node next) { //如果出界的话 if(next.row<0||next.col<0||next.row>=Row||next.col>=Col) return ; //如果无法通过 if(map[next.row][next.col]=='*') return; //如果说得到一个 if(mark[next.row][next.col][next.dir]==-1||mark[next.row][next.col][next.dir]>next.cost) { mark[next.row][next.col][next.dir]=next.cost; q.push(next); } } int bfs() { Node now,next; while(!q.empty()) { now=q.front();q.pop(); //向前走一步 next.dir=now.dir;//方向不变 next.cost=now.cost;//费用不变 next.row=now.row+dir[next.dir][0];//位置改变 next.col=now.col+dir[next.dir][1];//位置改变 check(next);//检查 //向右转 next.dir=(now.dir+3)%4;//方向改变 next.cost=now.cost+rcost;//费用改变 next.row=now.row;//位置不变 next.col=now.col;//位置不变 check(next);//检查 //向左转 next.dir=(now.dir+1)%4;//方向改变 next.cost=now.cost+lcost;//费用改变 next.row=now.row;//位置不变 next.col=now.col;//位置不变 check(next);//检查 } return 0; } int main() { //freopen("in.txt","r",stdin); Node now;int i,j,k; int casen;scanf("%d",&casen); while(casen--) { //初始化 //清空队列 while(!q.empty()) q.pop(); //初始化hash for(i=0;i<MAX;i++) { for(j=0;j<MAX;j++) { for(k=0;k<4;k++) { mark[i][j][k]=-1; } } } //初始化reuslt result=100000; //输入 scanf("%d %d",&Row,&Col); for(i=0;i<Row;i++) scanf("%s",map[i]); scanf("%d",&k); scanf("%d %d",&startcol,&startrow);//先输入的是列,让后才是行 scanf("%d %d", &endcol, &endrow);//先输入的是列,让后才是行 startcol--;startrow--;endcol--;endrow--; now.row=startrow;now.col=startcol;now.cost=0; //首先压入四个方向 for(i=0;i<4;i++) { now.dir=i;mark[now.row][now.col][i]=0; q.push(now); } //处理 bfs(); //判断结果和输出 for(i=0;i<4;i++) { if(mark[endrow][endcol][i]==-1) { continue; } if(mark[endrow][endcol][i]<result) { result=mark[endrow][endcol][i]; } } if(result<=k) { cout<<"yes"<<endl; } else { cout<<"no"<<endl; } } return 0; }
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/16/b1201e5e2f4eda7065188087a17bb68f.gif)
相关文章推荐
- 调试时出现:“没有找到 MSVCR80D.dll,因此这个程序未能启动,重新安装应用程序,可能会修复此问题”错误提示,如何解决?
- 迷宫中的一类与转弯有关的问题 BFS||DFS hdoj1728,cf 793b ,hihocoder1519
- 调试中出现:“没有找到MFC80UD.DLL"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题”错误提示
- [修复Win8.1 BUG] 解决Win8.1英文字体发虚不渲染问题
- SlidingMenu开源控件侧拉栏无法滑动问题修复,bug解决
- 什么是MD5,什么是SHA-1,如何校验这些Hash。还有拿单个ISO文件的MD5,SHA-1讯问是不是原版的问题,
- tuzicms二级导航栏目地址URL问题bug修复包
- 没有找到MSVCP80D.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题.
- [置顶] Swift 调试bug问题记录(长期记录)
- 软技能和硬技能哪个重要?科技行业需要重新思考这个问题
- 没有找到MFC80D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复问题。
- 解决“没有找到 rtl100.bpl,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- HDOJ 题目1728 逃离迷宫(BFS)
- 关于"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"的解决方案
- HDOJ 1728 逃离迷宫(BFS)
- Qt5+CEF3完成GUI,原版问题修复与分析
- 意外的预编译头错误,只需重新运行编译器就可能修复此问题
- 前端easyUI时间控件datebox小bug问题修复
- VS2008调试程序时出现“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”的解决办法