题目为解救小哈

第一种为dfs

#include <iostream>using namespace std;
int dx,dy,n,m,imin=99999999;
int a[1000][1000],book[1000][1000];
void dfs(int x,int y,int step)
{int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};int tx,ty;if(x==dx&&y==dy){if(step<imin) imin=step;return ;}for(int k=0;k<4;k++)//枚举4个方向 {tx=x+next[k][0];ty=y+next[k][1]; if(tx<1||tx>n||ty<1||ty>m) continue;if(a[tx][ty]==0&&book[tx][ty]==0){book[tx][ty]=1;dfs(tx,ty,step+1);book[tx][ty]=0;}}return ;
}
int main()
{int sx,sy;cin >> n >> m;for(int i=1; i<=n; i++)for(int j=1; j<=m; j++)cin >> a[i][j];cin >> sx >> sy >> dx >> dy;book[sx][sy]=1;//从当前位置开始搜索dfs(sx,sy,0);cout << imin;return 0;}

第二种为bfs

#include <iostream>
#include <queue>
using namespace std;
int sx,sy,dx,dy,n,m,imin=99999999;
int a[100][100],book[100][100];
struct node
{int x,y,s; //x,y存坐标,s存步数
};void bfs(int x,int y)
{int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//上下左右移动 queue<node> p;node head,tail;//一个头一个尾 head.x=x;head.y=y;head.s=0;//这三行是存个头 p.push(head);//头塞进队列 while(!p.empty())//检查是否为空 {head=p.front(); //将第一个元素变成头 p.pop();//删去第一个检查过的元素便于往后查找 if(head.x==dx&&head.y==dy)//查找到直接退出,bfs一定是最优解 {imin=head.s;return;}for(int k=0;k<4;k++)//枚举四个方向 {tail.x=head.x+next[k][0];tail.y=head.y+next[k][1];if(tail.x<1||tail.x>n||tail.y<1|tail.y>m) continue;//判断越界 if(a[tail.x][tail.y]==0&&book[tail.x][tail.y]==0){book[tail.x][tail.y]=1; //标记 tail.s=head.s+1; //下一次步数=这次+1 p.push(tail);//这次的尾变成下一次的头 }}}}
int main()
{cin >> n >> m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin >> a[i][j];cin >> sx >> sy >> dx >> dy;book[sx][sy]=1;//将开始位置标记 bfs(sx,sy);cout << imin ;
}

啊哈算法dfs-bfs相关推荐

  1. 算法 - DFS/BFS

    DFS函数大概率会传递"位置信息",根据位置信息获取下一步的选择,(大部分是在循环中)选择.执行.回退 例如N皇后的 棋盘位置(x, y),组合问题的 idx DFS函数的目的是, ...

  2. (造轮子)C 创建队列和图实现广度优先算法(BFS)和深度优先算法(DFS)(数据结构)

    链表.队列和图实现BFS和DFS算法(C+造轮子+详细代码注释) 1.队列的链式存储结构   队列的链式表示称为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表.头指针指向队头节点,尾指针指向 ...

  3. python 拓扑排序 dfs bfs_图遍历算法之DFS/BFS

    在计算机科学, 图遍历(Tree Traversal,也称图搜索)是一系列图搜索的算法, 是单次访问树结构类型数据(tree data structure)中每个节点以便检查或更新的一系列机制.图遍历 ...

  4. ROB 第一篇 DFS BFS (寻迹算法)

    ROB 第一篇 DFS & BFS DFS & BFS 简单介绍 原理 DFS BFS 总结 DFS & BFS 简单介绍 DFS (depth first search) 和 ...

  5. 熬夜怒肝,图解算法!BFS和DFS的直观解释

    一.前言 我们首次接触 BFS 和 DFS 时,应该是在数据结构课上讲的 "图的遍历".还有就是刷题的时候,遍历二叉树我们会经常用到BFS和DFS.它们的实现都很简单,这里我就不哆 ...

  6. ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(三)

    本文为:ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第三篇 深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一) 深度优先算法(DF ...

  7. (3)【全局路径规划】图搜索的路径探索方法--DFS\BFS\DFS-ID、贪心算法、Dijkstra和A*、JPS、.hybird A*、

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 图搜索的方法 0.基础知识介绍 1)图的概念 2)规划配置空间(C- ...

  8. ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(一)

    本文为 ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第一篇 深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一) 深度优先算法(DF ...

  9. 安琪拉教鲁班学算法之BFS和DFS

    安琪拉教鲁班学算法之BFS和DFS <安琪拉与面试官二三事>系列文章 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 <安琪拉教鲁班学算法 ...

  10. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

最新文章

  1. 界面交互推荐-25个闪亮创意的404错误页面设计-你从中发现了什么
  2. shell字符串的处理
  3. 四、深入elasticsearch中文搜索
  4. torch.argmax()函数
  5. Angular使用中的编码tips(持续更)
  6. 操作系统之进程管理:9、进程互斥的硬件实现方法
  7. STM32 - 定时器的设定 - 基础 01 - Timer Base - Prescaler description - Upcounting mode
  8. 多线程-使线程具有有序性
  9. 题解P3711:【仓鼠的数学题】
  10. Server.Variables属性大全(转载)
  11. ELK详解(九)——Logstash多日志收集实战
  12. JavaScript Date时间对象
  13. Safari 搜寻引擎被 Yahoo 绑架,试试这 4 种解决方法
  14. 《OSPF和IS-IS详解》一2.4 理解内部BGP
  15. tkinter 文本框 值改变_【动图详解】PPT中文本框的使用方法,初学者必看!
  16. minist数据集下载,numpy可直接读取的npy格式
  17. 信息系统管理师备考指南
  18. excel粘贴时出现故障_Excel常见问题及解决办法汇总
  19. IRP、IO_STACK_LOCATION、文件三种读写方式(buffer/driect/other)、DeviceIoControl
  20. 遭遇灰鸽子BackDoor.Gpigeon.ymg新变种

热门文章

  1. 使用mybatis-plus如何实现分页查询功能
  2. 计算机培训报名表 自我介绍,单招报名表自我介绍
  3. 微星MSI GE66 10SF-416RU电脑 Hackintosh 黑苹果efi引导文件
  4. 使用Go语言实现高效的并发编程
  5. 异类 不一样的成功启示录
  6. IE8的Textarea滚动条乱跳的解决方案
  7. c语言重画清屏函数,写了个小程序,一直会闪屏,用的gotoxy函数,求大神教
  8. 客户关系管理的很好的例子
  9. ST电机库v5.4.4源代码分析(6): PID以及相关参数
  10. cisco的访问控制列表ACL的基本使用(大白话版)(基于cisco packet tracer)