Oliver的救援(广搜练习题)
题目大意
一个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的救援(广搜练习题)相关推荐
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
- 搜索:广搜 词语阶梯
问题描述以及解决过程如下导图 广搜实现如下 #include <iostream> #include <algorithm> #include <vector> # ...
- [NC23486]小A与小B 双向广搜
题解:这个题属于走迷宫类型问题的一个升级版吧,不同之处在于一秒钟小A走一步,小B可以走两步,这两种事件是同时发生的,所以我们每秒钟让A扩散一步,让B扩散两步. 两个人走过的路径分别用 visited[ ...
- 【图论专题】BFS中的双向广搜 和 A-star
双向广搜 AcWing 190. 字串变换 #include <cstring> #include <iostream> #include <algorithm> ...
- [数据结构] 迷宫问题(栈和队列,深搜和广搜)
代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...
- UVA 122 Trees on the level 二叉树 广搜
题目链接: https://vjudge.net/problem/UVA-122 题目描述: 给你一种二叉树的构造方法, 让你逐层输出二叉树的节点值, 如果不能够则输出"not comple ...
- hrbust 1616 密码锁(广搜)
分析:广搜,每个四位数作为一个状态,从每个状态扩展出其他的几种状态并累加步数之后加入队列. 1 #include <stdio.h> 2 #include <string.h> ...
- [kuangbin] M - Find a way(简单广搜)
题目链接:https://vjudge.net/contest/215603#problem/M 其中三维数组dis将两个广搜合并到了一起 #include<iostream> #incl ...
- hdu5025 状态压缩广搜
题意: 悟空要救唐僧,中途有最多就把钥匙,和最多五条蛇,要求就得唐僧并且拿到所有种类的钥匙(两个1只拿一个就行),拿钥匙i之前必须拿到钥匙i-1,打蛇多花费一秒,问救出唐僧并且拿到所有种类 ...
- 图论 用广搜搜邻接矩阵
用广搜搜邻接矩阵 只是从某一点开始搜,如果是遍历全图的话就每个顶点挨个搜一遍 #include<stdio.h> #include<string.h> #include< ...
最新文章
- mysql 清空表怎么恢复_mysql怎么恢复删除的表?mysql找回误删表的数据方法
- MySQL笔记2: count() 函数和 sum() 函数用法和区别
- iconfont 图标宽高出问题_一个技巧,100,000,000+PPT图标就可以任性使用!【黑科技第11期】...
- NB-IoT SNR RSRQ RSRP等信号参数解释
- junit测试线程_一个在自己的线程中运行测试的JUnit规则
- r语言数据变量分段_使用R语言实现数据分段
- python用于人工智能哪些领域_Python那么火?哪些领域可以用它?
- python redis 订阅发布_【Python之旅】第七篇(三):使用Redis订阅服务
- springmvc前后端传值总结
- 二叉树的层次遍历(自底向上)Python
- php 微信 other,PHP——仿造微信OpenId
- 小样本(小于30)假设检验与置信区间
- 【C#.NET MVC】Deft框架简介与基本使用
- Python实现word的基本操作
- 下载Windows ARM版本记录
- Sass扫码点餐源码 单门店多门店餐饮连锁扫码点餐外卖自提系统源码
- 训练集、验证集、测试集划分
- iPad 4.2.1 非完美越狱
- 区块链论文8(ContractGuard分析写作手法)
- String字符串中数字排序(Java)
热门文章
- 域名被污染解决方法及DNS污染清洗方法
- python操作jira修改status及写入comment
- Android USB串口摄像头实现拍照与识别二维码
- 例行检查软件列表,突然发现不明sangforvnc应用
- openwrt 使用自定义 DNS
- 微信公众号无服务器 外部链接,新技能Get丨微信公众号如何插入外部链接?
- uniapp 跳转外部链接
- [机器学习基石]台大林轩田笔记1 -- The Learning Problem
- 做uni-app时,遇到后台返回base64码,将base64码转为图片,但是图片没有显示出来的解决方法
- python函数——Bunch配置加载