21. 吃货续
来源:互联网 发布:poser人体造型软件 编辑:程序博客网 时间:2024/06/11 05:52
上次郭老师让大家帮忙找餐厅,今天他又来请大家帮忙了。郭老师想从自己的当前位置用最快的时间到达某一餐厅,他每次只能按照上、下、左、右四个方向移动,每次移动计为 1 个时间,但由于路况纷繁复杂,中间有很多的路障,导致他不得不绕过这些路障。此时,具有魔性的高老师出现了,他帮助郭老师在途中的某些点放置了穿梭机,任意两个穿梭机之间可以完成瞬间移动(瞬间移动不耗费时间)。
输入
第一行包含两个数字 n m(1 ≤ n, m ≤ 2000)
接下来包含 n 行,每行 m 个字符,表示现在的地图。'.' 表示空地,'M' 表示路障,'E' 表示穿梭机,'N' 表示郭老师当前所在的位置,'C' 表示要找的餐厅。'N' 和 'C' 在地图中出现且仅出现一次。
输出
郭老师最快多长时间能到达餐厅。如果永远到不了,输出 "Not Happy"。
测试输入 期待的输出 时间限制 内存限制 额外进程
- 6 6↵
- ...E..↵
- EMM.M.↵
- .M..M.↵
- .MC.M.↵
- .MMM..↵
- N..E..↵
- 7↵
#include<stdio.h>//AC#include<string.h>char map[2005][2005] = { '\0' };char vis[2005][2005] = { '\0' };//0-没走过;1-走过int trend[4][2] = { { 1,0 },{ -1,0 },{ 0,1 },{ 0,-1 } };int n, m, num=0;struct CoordinateMode//坐标模式{short mx;short my;int step;}Pass[2000000],Queue[4000000];//注意数组大小,有次queue的开2000000结果显示一个WA一个REstruct CoordinateMode *head, *end;struct CoordinateMode start;//记录N的位置int Judge(struct CoordinateMode xx)//边界及限制判断{if (xx.my >= 1 && xx.my <= m && xx.mx >= 1 && xx.mx <= n && map[xx.mx][xx.my] != 'M' && vis[xx.mx][xx.my] != '1')return 1;elsereturn 0;}void Q_in(struct CoordinateMode ww)//添加队列{end++;*end = ww;vis[ww.mx][ww.my] = '1';}int Q_empty()//队列是否为空{if (head == end)return 1;elsereturn 0;}void Find(){memset(vis, '\0', sizeof(vis));head = Queue;end = Queue;struct CoordinateMode now, next;Q_in(start);while (!Q_empty()){head++;now = *head;for (int i = 0; i<4; i++){next.mx = trend[i][0] + now.mx;next.my = trend[i][1] + now.my;if (Judge(next)){next.step = now.step + 1;if (map[next.mx][next.my] == 'C'){printf("%d\n", next.step);return;}if (map[next.mx][next.my] == 'E'){for (int j = 0; j<num; j++){Pass[j].step = next.step;Q_in(Pass[j]);}}elseQ_in(next);}}}printf("Not Happy\n");}int main(){char ch;scanf("%d%d", &n, &m);getchar();for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){ch = getchar();map[i][j] = ch;if (map[i][j] == 'N'){start.mx = i;start.my = j;start.step = 0;}if (map[i][j] == 'E'){Pass[num].mx = i;Pass[num].my = j;num++;}}getchar();}Find();return 0;}
阅读全文
0 0
- 21. 吃货续
- 吃货联盟
- 18. 吃货
- 公共场合的吃货们
- 吃货876经验
- 吃货老爸-项目立项
- 餐前试毒:做个吃货,做个傻逼
- [乐意黎原创] 吃货是什么意思?
- 吃货876APP参考文档
- 吃货876参考文档二
- 厦门漳州吃货之行
- 吃货的自然语言消岐
- 好吃货在美食当中
- 让吃货失望的菜单
- S1复习项目吃货联盟
- bzoj 4479: [Jsoi2013]吃货jyy
- 20171029D-吃货的烦恼
- 吃货联盟点餐系统
- GCC笔记(警告.优化以及调试选项)
- 23种设计模式--结构型模式(适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)
- 父进程退出后如何通知子进程退出
- ORACLE Unit05 视图、序列、索引 、 约束
- Oracle那些事(11)-SQL单表查询
- 21. 吃货续
- Android Studio安装教程
- error C2065: 'AfxGetFileName' : undeclared identifier
- Xen虚拟地址转换
- 大数题目
- HEVC函数入门(2)——帧内编码一个CU
- 【c++】简单异常处理笔记
- 读《李善友:你与高手的距离,并非只差了一万小时练习》有感
- 关于linux系统环境变量的一点理解