ccf 认证 201604-4:游戏
来源:互联网 发布:裴蕾网络逃犯 编辑:程序博客网 时间:2024/05/18 04:55
解题思路:学过搜索的一眼就能看出是广搜,没学过建议翻翻书,毕竟考得挺多。
注意事项:
1.广搜用队列来实现,也可用数组循环来实现。
2.需要优化,不然会出现超时。
3.通关最长时间不超过300秒。
4.可以往回走。
5.每走一步都要判断是否安全和是否可达。
6.最关键的一个条件,不太容易在短时间想到:同一个节点同一时刻只能加队列一次。必须加上这个条件不然会超时。
ps:下面的是我写的源码,满分通过,可能还有需要优化的地方,欢迎各位朋友指教。
#include<iostream>#include<queue>using namespace std;struct node{ int x; int y; int time;}nod;struct dead{ int start; int end;}dead[105][105]={0};int n,m,t;queue<node>q;int path[4][2]={1,0,0,1,0,-1,-1,0};int flag[105][105][305]={0};bool issaf(int a,int b,int t){ if((a>=1 && a<=n && b>=1 && b<=m) && t<=300 && (t<dead[a][b].start || t>dead[a][b].end) && (flag[a][b][t]==0)) { return true; } return false;}int main(){ scanf("%d%d%d",&n,&m,&t); int r,c,a,b; for(int i=0;i<t;++i) { scanf("%d%d%d%d",&r,&c,&a,&b); dead[r][c].start=a; dead[r][c].end=b; } int x=0,y=0; node nd; nd.x=nd.y=1; nd.time=0; q.push(nd); int now=0; while(!q.empty()) { nd=q.front(); q.pop(); if(nd.x==n && nd.y==m) { break; } now=nod.time=nd.time+1; for(int i=0;i<4;++i) { x=nod.x=nd.x+path[i][0]; y=nod.y=nd.y+path[i][1]; if(issaf(x,y,now)) { q.push(nod); flag[x][y][now]=1; } } } printf("%d",nd.time); return 0;}
0 0
- ccf 认证 201604-4:游戏
- ccf认证游戏
- CCF 201604-4 游戏
- ccf 201604-4 游戏
- CCF 201604-4 游戏
- ccf 201604-4游戏
- CCF 201604-4 游戏
- CCF 201604-4游戏
- 201604-4 游戏 ccf
- ccf认证消除类游戏
- ccf认证游戏100分
- CCF认证 201604 俄罗斯方块
- ccf认证-201509-4
- ccf认证-201503-4
- CCF认证20151202(消除游戏)
- ccf认证游戏40运行超时
- CCF认证201512-2 消除类游戏
- CCF认证201604-2 俄罗斯方块
- pl0语言文法的EBNF表示
- 红外遥控器学习
- MySQL SQL Column Truncation
- IOS 第三方库之-MBProgressHUD的使用详解
- <设计模式13>享元模式
- ccf 认证 201604-4:游戏
- Android面试题
- Node.js与Express4安装与配置
- broadcom -博通 mesh 组网之智能家居
- 穿过已知点画平滑曲线(3次贝塞尔曲线)
- docker镜像加速之CentOS7
- 利用Math.random()函数,获取4位随机的数字验证码
- 6.0权限
- MFC中跨线程UpdateData(FALSE)报错 ASSERT FAILD问题