每日一题——魔鬼之城
**每日一题——魔鬼之城
题目传送门----魔鬼之城
—————————————我是分割线———————————————
题目解读
标准BFS或DFS,我是用BFS打的
可是题干中的这句话
因为这样他第二次跳跃的方向将和第一次相同,而这是不允许的>
导致我们在DFS或BFS时需要四个参
struct made{int x;//横坐标int y;//竖坐标int t;//时间int f;//上一次是从哪里过来的
};
queue<made> q;
可是与其他标准BFS不同的还有它可以向八个方向:上下左右,还有四条斜边。并且再每一个格子行走的距离必须是当前格子的值。如果剩余格子长度则不够无法行走。
—————————————我是分割线———————————————
思路诠述
使用一个三维数组
bool f[110][110][9]={};
第一维和第二维表示当前所在的点,第三维表示在八个方向走过没有;
如果走过则不能再走;
注意!!题目说这次走的方向不能和上次一样;
————————————我是分割线————————————————
代码展示
在这里插入#include<bits/stdc++.h>
using namespace std;
int a[110][110];
struct made{int x;//横坐标int y;//竖坐标int t;//时间int f;//上一次是从哪里过来的
};
bool f[110][110][9]={};
queue<made> q;//made 队列
int main()
{int n,m;scanf("%d%d",&m,&n);//**注意题目是先读列再读行**for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);q.push((made){1,1,0,0});//从第一行第一个各自开始,走了0步,上一次没有方向while(!q.empty()){int xx=q.front().x;int yy=q.front().y;int tt=q.front().t;int ff=q.front().f;
// printf("ff== %d\n",ff);q.pop();if(xx==n&&yy==m){printf("%d",tt);return 0;}else{//八个方向搜索
// printf("xx== %d,yy== %d,tt== %d\n",xx,yy,tt);if(xx-a[xx][yy]>=1&&xx-a[xx][yy]<=n&&yy>=1&&yy<=n&&f[xx][yy][1]==0&&ff!=1){q.push((made){xx-a[xx][yy],yy,tt+1,1});f[xx][yy][1]=1;//不能再走}if(yy-a[xx][yy]>=1&&yy-a[xx][yy]<=m&&xx>=1&&xx<=n&&f[xx][yy][7]==0&&ff!=7){q.push((made){xx,yy-a[xx][yy],tt+1,7});f[xx][yy][7]=1;//以下相同代码同上}if(xx+a[xx][yy]<=n&&xx+a[xx][yy]>=1&&yy<=m&&yy>=1&&f[xx][yy][5]==0&&ff!=5){q.push((made){xx+a[xx][yy],yy,tt+1,5});f[xx][yy][5]=1;}if(yy+a[xx][yy]<=m&&yy+a[xx][yy]>=1&&xx>=1&&xx<=n&&f[xx][yy][3]==0&&ff!=3){q.push((made){xx,yy+a[xx][yy],tt+1,3});f[xx][yy][3]=1;}if(xx+a[xx][yy]<=n&&xx+a[xx][yy]>=1&&yy+a[xx][yy]>=1&&yy+a[xx][yy]<=m&&f[xx][yy][4]==0&&ff!=4){q.push((made){xx+a[xx][yy],yy+a[xx][yy],tt+1,4});f[xx][yy][4]=1;}if(xx+a[xx][yy]<=n&&xx+a[xx][yy]>=1&&yy-a[xx][yy]>=1&&yy-a[xx][yy]<=m&&f[xx][yy][6]==0&&ff!=6){q.push((made){xx+a[xx][yy],yy-a[xx][yy],tt+1,6});f[xx][yy][6]=1;}if(xx-a[xx][yy]>=1&&xx-a[xx][yy]<=n&&yy-a[xx][yy]>=1&&yy-a[xx][yy]>=1&&f[xx][yy][2]==0&&ff!=2){q.push((made){xx-a[xx][yy],yy-a[xx][yy],tt+1,2});f[xx][yy][2]=1;}if(xx-a[xx][yy]>=1&&xx-a[xx][yy]<=n&&yy+a[xx][yy]<=m&&yy+a[xx][yy]>=1&&f[xx][yy][8]==0&&ff!=8){q.push((made){xx-a[xx][yy],yy+a[xx][yy],tt+1,8});f[xx][yy][8]=1;}}}printf("NEVER");return 0;
}//完美结尾
——————————————我是分割线——————————————
反思
没有使用方向数组导致代码冗长;
读题不够完善;
每日一题——魔鬼之城相关推荐
- 【寒假每日一题】剪绳子(个人练习)详细题解+推导证明(第六天)
文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 今天终于出核酸检测的结果,还好大家都没事,不然怕是要封城了!!! 今天还是寒假 ...
- 安卓 每日一题 2019年9-12月问题及答案
最新 文章连接,本文不再同步 安卓 每日一题 2019年9-12月问题及答案 文章目录 安卓 每日一题 2019年9-12月问题及答案 安卓2019年09月每日一题 安卓2019年10月每日一题 安卓 ...
- 对数函数定义域和值域_呆哥数学每日一题 —— 复合函数值域
如果想要获取往期每日一题电子版,可以加我微信:daigemath366,备注:知乎 每日一题 呆哥解析:这是一个函数和复合函数的综合问题 首先我们先把原函数的值域求出来 先直接求导: 导数不容易判断单 ...
- 每日一题(进制转换)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- 每日一题(合并表格)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- 每日一题(字符串拆分)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- (每日一题)P3768 简单的数学题(确信)(莫反 + 欧拉反演 + 杜教筛 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.20 莫反 和上午的那道题比较类似的 ...
- (每日一题)P1447 [NOI2010] 能量采集(莫反套路 + 欧拉反演 / 容斥原理)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.19 莫反 Problem Solu ...
- (每日一题)P3723 [AH2017/HNOI2017]礼物(经典FFT)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.15 多项式 FFT Problem ...
最新文章
- K-means算法(理论+opencv实现)
- 手把手教你C语言静态库的开发
- linux监控采集项
- 23、90秒快速“读懂”STP(生成树)工作原理
- HTML 提高页面加载速度的方法
- phpmyadmin创建/导入/导出mysql数据库教程_PhpMyAdmin创建/导入/导出MySQL数据库教程[图文]...
- React实战入门课程:dva开发一个cnode网站(3)
- c#如何实现叫号操作_C#开发银行叫号系统方案
- 完美解决SAMSUNG Mobile USB CDC Composite Device安装失败 三星手机USB驱动失败。
- html炫酷特效代码博客,HTML特效代码!
- 360云盘 上传服务器忙,360云盘由于服务器压力延期一年关闭 可以慢慢转移资源了...
- 负载均衡实现的各种优缺点
- 计算机的操作系统的功能有哪些,操作系统的主要功能是主要有哪些类型
- 解救小哈(深度优先,广度优先)
- 免疫组库数据分析(三):免疫组库数据可视化
- 单片机c语言交通灯源程序,基于80C51单片机的交通灯C语言源程序
- 电脑手机二合一 华为云电脑你办公的好助手 最适合上班族
- MongoDB4.0 配置文件
- 织梦教程:ms在channel标签中调用typeid无效解决办法
- 上千家企业涌入蚂蚁开放联盟链:在区块链上抢先吃红利螃蟹
热门文章
- 下丘脑属于间脑还是边缘系统?|小白心理-312/347考研答疑
- NCTF2022 calc题目复现
- 0的阶乘是多少?0的算法,工龄有哪些计算法?
- 数据化管理助力传统制造业,实现供应链上游生产车间可视化监控
- Nginx之7移花接木 - (反向代理) 1
- SAPGUI黑色背景设置
- handlebar,js简单使用
- java中类的加载顺序介绍(ClassLoader)
- Excel 核对两张表格的差异数据方法
- Python _ssl.c:507: EOF occurred in violation of protocol