ACM集训日记-8月2日
来源:互联网 发布:java查询oracle数据库 编辑:程序博客网 时间:2024/05/11 17:36
今天真是风雨大作,似乎整个人变得跟天气一样有些水,今天打死也就只出了两道题,都是广搜索的,说实话,我对搜索的掌握还不太透彻,之前做的都是深搜,对深搜和广搜的区别还不懂。今天做了两道广搜,并且上网看了别的coder对深搜广搜的理解,才稍微对广搜和深搜的做法有所心得。广搜对求最优解的时候能节省一些时间,但是比较占用内存,用的基本是队列,而深搜用的是函数递归的思想,比较节省内存,但是费时间。做了这些题,我才有点摸到了一些套路,比如这道题需要用到广搜的时候,代码中基本是会有设置一个结构体,来代替题目中的一个点或者一个值,然后会用到一个队列queue<结构体>,往里面压每次的情况,若符合就输出题目所求的东西,若队列中没有东西了也没找到符合条件的,就说明找不到。例如今天做的地下城迷宫类型的,用了三维数组来描述地下城的结构,然后就利用队列的特性广搜
while(!q.empty()) { now=q.front();//确定当前位置 q.pop(); for(int i=0;i<6;i++) { next.x=now.x+dl[i]; next.y=now.y+dr[i]; next.z=now.z+dc[i];//寻找下一个位置 if(judge(next.x,next.y,next.z))//判断下一个位置是否可行 { next.t=now.t+1;//可行,则所求变量加一 if(dun[next.x][next.y][next.z]=='E')return next.t; vis[next.x][next.y][next.z]=1; q.push(next);//往队列中压这个位置 } }不过做第一道广搜的时候我把判断能行走的条件之一为接下来的位置是'.'这个卡了我好久,如果条件是这个的话,我相当于吧最后的出口E也当成墙壁看待了,将接下来的位置改为非'#'就成了,今天对广搜有了一些深刻的认知,以后碰见广搜也不会一头雾水了。
对于今天第二道广搜,真是让我非常难受,第一次提交wrong answer,看了很久,发现我没有重置储存状态的数组vis,而且其中有一个地方,也是新操作,就是个位是偶数的数一定不是素数,在循环遍历的时候能节省好多时间和空间呢。
明天又要训练赛了,早上多出几个题跟进一下进度,下午希望能做的多一点吧,加油:)
阅读全文
0 0
- ACM集训日记-8月2日
- ACM集训日记-8月8日
- ACM集训日记-8月1日
- ACM集训日记-8月3日
- ACM集训日记-8月4日
- ACM集训日记-8月5日
- ACM集训日记-8月7日
- ACM集训日记-8月9日
- ACM集训日记-8月10日
- ACM集训日记-8月11日
- ACM集训日记-8月12日
- ACM集训日记-8月14日
- ACM集训日记-8月15日
- ACM集训日记-8月16日
- ACM集训日记-8月17日
- ACM集训日记-8月18日
- ACM集训日记-8月19日
- ACM集训日记-8月21日
- bit、byte、位、字节、汉字、字符之间的区别
- Web内容回顾
- yii POST提交 Bad Request (#400)---Unable to verify your data submission的错误解决方法
- HDU 6058 Kanade's sum 链表+枚举
- 2017 Multi-University Training Contest
- ACM集训日记-8月2日
- 【mysql优化 2】索引条件下推优化
- 每日一题(11)—— 结构体大小
- JS的 try catch使用心得
- N
- QT UI显示中文的三种方法
- ORACLE数据库-数据控制语言DCL
- TensorFlow学习笔记(一)入门
- 集合框架——foreach语句