[BFS]电子老鼠闯迷宫
电子老鼠闯迷宫
Description
如下图12×12方格图,找出一条自入口(2,9)到出口(11,8)的最短路径。

Input
Output
Sample Input
12 //迷宫大小
2 9 11 8 //起点和终点
1 1 1 1 1 1 1 1 1 1 1 1 //邻接矩阵,0表示通,1表示不通
1 0 0 0 0 0 0 1 0 1 1 1
1 0 1 0 1 1 0 0 0 0 0 1
1 0 1 0 1 1 0 1 1 1 0 1
1 0 1 0 0 0 0 0 1 0 0 1
1 0 1 0 1 1 1 1 1 1 1 1
1 0 0 0 1 0 1 0 0 0 0 1
1 0 1 1 1 0 0 0 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 1
1 1 1 0 1 1 1 1 0 1 0 1
1 1 1 1 1 1 1 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
Sample Output
(2,9)->(3,9)->(3,8)->(3,7)->(4,7)->(5,7)->(5,6)->(5,5)->(5,4)->(6,4)->(7,4)->(7,3)->(7,2)->(8,2)->(9,2)->(9,3)->(9,4)->(9,5)->(9,6)->(8,6)->(8,7)->(8,8)->(9,8)->(9,9)->(10,9)->(11,9)->(11,8)
27
代码
#include<stdio.h>
#include<iostream>
using namespace std;
const int dx[5]={0,0,-1,0,1};
const int dy[5]={0,-1,0,1,0}; //四个可延伸的点
int n,x1,y1,x2,y2,a[1005][1005],fa[1005],st[1005][2],ans,last;
int check(int x,int y){ //判断这个点能不能延伸
if(x>0 and x<=n and y>0 and y<=n)
if(a[x][y]==0)return 1;
return 0;
}
void print(int x){ //输出
if(x==0)return ;
ans++;
print(fa[x]);
if(x!=last)
printf("(%d,%d)->",st[x][0],st[x][1]);
else printf("(%d,%d)\n",st[x][0],st[x][1]);
}
void bfs(){
int head=0,tail=1;
st[1][0]=x1;st[1][1]=y1;
fa[1]=0;
do{
head++;
for(int i=1;i<=4;i++){
if(check(st[head][0]+dx[i],st[head][1]+dy[i])){
tail++;
fa[tail]=head; //入队
st[tail][0]=st[head][0]+dx[i];
st[tail][1]=st[head][1]+dy[i];
a[st[tail][0]][st[tail][1]]=1; //标记为走过的
}
if(st[head][0]==x2 and st[tail][1]==y2){ //判断有没有到达终点
last=tail;
print(tail);
printf("%d",ans);
return ;
}
}
}while(head<=tail);
}
int main(){
scanf("%d",&n);
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
bfs();
return 0;
}
[BFS]电子老鼠闯迷宫的更多相关文章
- 【SSL1455&1456】 电子老鼠闯迷宫 & 骑士游行
考点概况: 广搜板子 题面: \[\Large\text{电子老鼠闯迷宫}\] \[Time~Limit:1000MS~~Memory~Limit:65536K\] Description 如下图12 ...
- noj电子老鼠走迷宫(深搜dfs)超时错误
1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色 ...
- noj->电子老鼠走迷宫
00 问题 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路.电子老鼠可以在路上向上.下.左.右行走,每一步走一个格子.现给定一个起 ...
- Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)
贪吃的小老鼠又回来了,这次有什么新的办法吃到奶酪呢? 规则不变,只能上下左右在格子内移动. 因为上次的深度优先算法让老鼠走了不少冤枉路,这次老鼠带来了帮手探路鼠.探路鼠的使用规则如下: 小老鼠按右.下 ...
- 九度OJ 1335:闯迷宫 (BFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1782 解决:483 题目描述: sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫. sun的室友在帮电脑节设计 ...
- 九度oj 题目1335:闯迷宫
题目描述: sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫.sun的室友在帮电脑节设计迷宫,所以室友就请sun帮忙计算下走出迷宫的最少步数. 知道了最少步数就可以辅助控制 ...
- 老鼠走迷宫II
转自:http://blog.csdn.net/holymaple/article/details/8636234 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢? 解法 ...
- 老鼠走迷宫I
转自:http://blog.csdn.net/holymaple/article/details/8582517 说明:老鼠走迷宫是递回求解的基本提醒,我们在二维阵列中使用2来表示迷宫墙壁,使用1来 ...
- BFS 、DFS 解决迷宫入门问题
问题 B: 逃离迷宫二 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 5[提交][状态][讨论版] 题目描述 王子深爱着公主.但是一天,公主被妖怪抓走了,并且被关到了迷宫. ...
随机推荐
- Micro Frontends & microservices
Micro Frontends & microservices https://micro-frontends.org/ https://github.com/neuland/micro-fr ...
- django学习-15.ORM查询方法汇总
1.前言 django的ORM框架提供的查询数据库表数据的方法很多,不同的方法返回的结果也不太一样,不同方法都有各自对应的使用场景. 主要常用的查询方法个数是13个,按照特点分为这4类: 方法返回值是 ...
- 15_MySQL·WHERE子句中条件执行的顺序
- Java自学第2期——注释、数据类型、运算符、方法
2.1.注释 注释用于说明某段代码的作用,某个类的用途,某个方法的功能,参数和返回值数据类型的意义等等: 注释非常非常非常重要,回顾代码时通过注释找回思路:团队沟通需要,让别人读懂你的代码,增加效率: ...
- Winform 判断打印机是否可用,实现设置默认打印机功能
Winform 判断打印机是否可用,实现设置默认打印机功能 http://www.cnblogs.com/zfanlong1314/p/3878563.html
- Vue和Element基础使用,综合案例学生列表实现
知识点梳理 课堂讲义 1.Vue 快速入门 1.1.Vue的介绍 Vue是一套构建用户界面的渐进式前端框架. 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合. 通过尽可能简单的A ...
- 解决java POI导入Excel超时问题
由于要导入大量数据,后台会耗费很长时间,导致超时. 本项目前端request.js中设定的超时时间为150s. const service = axios.create({ baseURL: base ...
- Linux 查看磁盘是否为SSD
第一步,找到磁盘 ll /dev/sd* ll /dev/vd* 第二步,查对应磁盘类型 cat /sys/block/sda/queue/rotational 结果: 返回0:SSD盘 返回1: ...
- Android Layout属性
通用属性 android:layout_height android:layout_width 值 含义 fill_parent/match_parent 高度或者宽度对齐到父控件 wrap_cont ...
- 剑指 Offer 58 - I. 翻转单词顺序 + 双指针
剑指 Offer 58 - I. 翻转单词顺序 Offer_58_1 题目描述 方法一:使用Split函数 package com.walegarrett.offer; /** * @Author W ...