题目大意

一个n*n的01矩阵,0表示可以走,1表示不可以走,只可以上下左右走。求从(a,b)走到(c,d)最少的格子数。

样例输入


5
01111
00111
10001
11101
11100

1 1 5 5


样例输出


9

思路


广搜

C++代码

#include<cstdio>
#include<cstring>
#define sr c=getchar()
#define input read()
#define pd (c<'0'||c>'9')
#define fk f=f*10+c-48
#define ps if (c=='-') d=-1
using namespace std;int n;char c;bool a[1005][1005];int father[1000001],state[1000001][4];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};//四个方向扩展
int x1,x2,y1,y2;
int read()
{int d=1,f=0;char c;while (sr,pd) ps;fk;while (sr,!pd) fk;return d*f;
}
void bfs()
{int head=0,tail=1;state[1][3]=1;father[1]=0;a[1][1]=1;do{head++;for (int i=0;i<4;i++){int x=state[head][1]+dx[i];int y=state[head][2]+dy[i];if (x>=1&&x<=n&&y>=1&&y<=n&&a[x][y]==0)//判断是否超出矩阵和能否走{tail++;father[tail]=head;state[tail][1]=x;//存横坐标state[tail][2]=y;//存纵坐标state[tail][3]=state[head][3]+1;//到这个格子走的格子数a[x][y]=1;//封路if(x==x2&&y==y2)//到达目标位置{printf("%d",state[head][3]);//输出return;}}}    }while(head<tail);
}
int main()
{scanf("%d\n",&n);char c;for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){c=getchar();if (c=='1') a[i][j]=true;}c=getchar();}state[1][1]=input;state[1][2]=input;x2=input;y2=input;bfs();
}

Oliver的救援(广搜练习题)相关推荐

  1. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  2. 搜索:广搜 词语阶梯

    问题描述以及解决过程如下导图 广搜实现如下 #include <iostream> #include <algorithm> #include <vector> # ...

  3. [NC23486]小A与小B 双向广搜

    题解:这个题属于走迷宫类型问题的一个升级版吧,不同之处在于一秒钟小A走一步,小B可以走两步,这两种事件是同时发生的,所以我们每秒钟让A扩散一步,让B扩散两步. 两个人走过的路径分别用 visited[ ...

  4. 【图论专题】BFS中的双向广搜 和 A-star

    双向广搜 AcWing 190. 字串变换 #include <cstring> #include <iostream> #include <algorithm> ...

  5. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  6. UVA 122 Trees on the level 二叉树 广搜

    题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...

  7. hrbust 1616 密码锁(广搜)

    分析:广搜,每个四位数作为一个状态,从每个状态扩展出其他的几种状态并累加步数之后加入队列. 1 #include <stdio.h> 2 #include <string.h> ...

  8. [kuangbin] M - Find a way(简单广搜)

    题目链接:https://vjudge.net/contest/215603#problem/M 其中三维数组dis将两个广搜合并到了一起 #include<iostream> #incl ...

  9. hdu5025 状态压缩广搜

    题意:       悟空要救唐僧,中途有最多就把钥匙,和最多五条蛇,要求就得唐僧并且拿到所有种类的钥匙(两个1只拿一个就行),拿钥匙i之前必须拿到钥匙i-1,打蛇多花费一秒,问救出唐僧并且拿到所有种类 ...

  10. 图论 用广搜搜邻接矩阵

    用广搜搜邻接矩阵 只是从某一点开始搜,如果是遍历全图的话就每个顶点挨个搜一遍 #include<stdio.h> #include<string.h> #include< ...

最新文章

  1. mysql 清空表怎么恢复_mysql怎么恢复删除的表?mysql找回误删表的数据方法
  2. MySQL笔记2: count() 函数和 sum() 函数用法和区别
  3. iconfont 图标宽高出问题_一个技巧,100,000,000+PPT图标就可以任性使用!【黑科技第11期】...
  4. NB-IoT SNR RSRQ RSRP等信号参数解释
  5. junit测试线程_一个在自己的线程中运行测试的JUnit规则
  6. r语言数据变量分段_使用R语言实现数据分段
  7. python用于人工智能哪些领域_Python那么火?哪些领域可以用它?
  8. python redis 订阅发布_【Python之旅】第七篇(三):使用Redis订阅服务
  9. springmvc前后端传值总结
  10. 二叉树的层次遍历(自底向上)Python
  11. php 微信 other,PHP——仿造微信OpenId
  12. 小样本(小于30)假设检验与置信区间
  13. 【C#.NET MVC】Deft框架简介与基本使用
  14. Python实现word的基本操作
  15. 下载Windows ARM版本记录
  16. Sass扫码点餐源码 单门店多门店餐饮连锁扫码点餐外卖自提系统源码
  17. 训练集、验证集、测试集划分
  18. iPad 4.2.1 非完美越狱
  19. 区块链论文8(ContractGuard分析写作手法)
  20. String字符串中数字排序(Java)

热门文章

  1. 域名被污染解决方法及DNS污染清洗方法
  2. python操作jira修改status及写入comment
  3. Android USB串口摄像头实现拍照与识别二维码
  4. 例行检查软件列表,突然发现不明sangforvnc应用
  5. openwrt 使用自定义 DNS
  6. 微信公众号无服务器 外部链接,新技能Get丨微信公众号如何插入外部链接?
  7. uniapp 跳转外部链接
  8. [机器学习基石]台大林轩田笔记1 -- The Learning Problem
  9. 做uni-app时,遇到后台返回base64码,将base64码转为图片,但是图片没有显示出来的解决方法
  10. python函数——Bunch配置加载