**每日一题——魔鬼之城

题目传送门----魔鬼之城

—————————————我是分割线———————————————
题目解读
标准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. 【寒假每日一题】剪绳子(个人练习)详细题解+推导证明(第六天)

    文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 今天终于出核酸检测的结果,还好大家都没事,不然怕是要封城了!!! 今天还是寒假 ...

  2. 安卓 每日一题 2019年9-12月问题及答案

    最新 文章连接,本文不再同步 安卓 每日一题 2019年9-12月问题及答案 文章目录 安卓 每日一题 2019年9-12月问题及答案 安卓2019年09月每日一题 安卓2019年10月每日一题 安卓 ...

  3. 对数函数定义域和值域_呆哥数学每日一题 —— 复合函数值域

    如果想要获取往期每日一题电子版,可以加我微信:daigemath366,备注:知乎 每日一题 呆哥解析:这是一个函数和复合函数的综合问题 首先我们先把原函数的值域求出来 先直接求导: 导数不容易判断单 ...

  4. 每日一题(进制转换)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  5. 每日一题(合并表格)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  6. 每日一题(字符串拆分)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  7. (每日一题)P3768 简单的数学题(确信)(莫反 + 欧拉反演 + 杜教筛 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.20 莫反 和上午的那道题比较类似的 ...

  8. (每日一题)P1447 [NOI2010] 能量采集(莫反套路 + 欧拉反演 / 容斥原理)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.19 莫反 Problem Solu ...

  9. (每日一题)P3723 [AH2017/HNOI2017]礼物(经典FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.15 多项式 FFT Problem ...

最新文章

  1. K-means算法(理论+opencv实现)
  2. 手把手教你C语言静态库的开发
  3. linux监控采集项
  4. 23、90秒快速“读懂”STP(生成树)工作原理
  5. HTML 提高页面加载速度的方法
  6. phpmyadmin创建/导入/导出mysql数据库教程_PhpMyAdmin创建/导入/导出MySQL数据库教程[图文]...
  7. React实战入门课程:dva开发一个cnode网站(3)
  8. c#如何实现叫号操作_C#开发银行叫号系统方案
  9. 完美解决SAMSUNG Mobile USB CDC Composite Device安装失败 三星手机USB驱动失败。
  10. html炫酷特效代码博客,HTML特效代码!
  11. 360云盘 上传服务器忙,360云盘由于服务器压力延期一年关闭 可以慢慢转移资源了...
  12. 负载均衡实现的各种优缺点
  13. 计算机的操作系统的功能有哪些,操作系统的主要功能是主要有哪些类型
  14. 解救小哈(深度优先,广度优先)
  15. 免疫组库数据分析(三):免疫组库数据可视化
  16. 单片机c语言交通灯源程序,基于80C51单片机的交通灯C语言源程序
  17. 电脑手机二合一 华为云电脑你办公的好助手 最适合上班族
  18. MongoDB4.0 配置文件
  19. 织梦教程:ms在channel标签中调用typeid无效解决办法
  20. 上千家企业涌入蚂蚁开放联盟链:在区块链上抢先吃红利螃蟹

热门文章

  1. 下丘脑属于间脑还是边缘系统?|小白心理-312/347考研答疑
  2. NCTF2022 calc题目复现
  3. 0的阶乘是多少?0的算法,工龄有哪些计算法?
  4. 数据化管理助力传统制造业,实现供应链上游生产车间可视化监控
  5. Nginx之7移花接木 - (反向代理) 1
  6. SAPGUI黑色背景设置
  7. handlebar,js简单使用
  8. java中类的加载顺序介绍(ClassLoader)
  9. Excel 核对两张表格的差异数据方法
  10. Python _ssl.c:507: EOF occurred in violation of protocol