电子老鼠闯迷宫【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
> 解题思路
这一题用广搜解。
a[maxn][maxn]表示矩形方阵;f[maxnmaxn]表示列队;
s[maxnmaxn][3],1表示当前点的横坐标,2表示纵坐标,记录状态。
如果当前的位置可以走的话就tail加1,把当前位置的父结点加入队列;当现在的head(父结点)已经没有子结点的话,就把head加1,把上一个已经没有子结点的父结点退出队列。
只要是走过的路线都要把它赋值为1(障碍),防止有重复的路线,而且先到某一个路线的一定是最快最优的。
然后就像这样>>
> 代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int d1[5]={0,-1,0,0,1},d2[5]={0,0,-1,1,0};
//这里是表示当前位置的四条路线
const int maxn=1001;
int a[maxn][maxn],f[maxn*maxn],s[maxn*maxn][3];
int n,a1,b1,a2,b2,len;bool aka(int q1,int q2)
{if(a[q1][q2]==1) return false;return true;
}//判断是否越界void output(int x)
{if(x==1) return;len++;output(f[x]);printf("->(%d,%d)",s[x][1],s[x][2]);
}void lil()
{int h=0,t=1;f[t]=0;//第一个的父结点一定是0s[1][1]=a1; s[1][2]=b1;a[a1][b1]=1;//把起点看做是走过了,设为障碍do{h++;for(int k=1;k<=4;k++){if(aka(s[h][1]+d1[k],s[h][2]+d2[k])){t++;f[t]=h;//把这一个路线加入队列s[t][1]=s[h][1]+d1[k];s[t][2]=s[h][2]+d2[k];a[s[t][1]][s[t][2]]=1;//走过的设为障碍1}if(s[t][1]==a2&&s[t][2]==b2)//当已经到达终点就输出返回{len=1;printf("(%d,%d)",a1,b1);output(t);printf("\n%d",len);return;}}}while(h<=t);
}int main()
{memset(a,1,sizeof(a));//不管是障碍还是界限外,都把它看为是障碍1scanf("%d%d%d%d%d",&n,&a1,&b1,&a2,&b2);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);lil();return 0;
}
电子老鼠闯迷宫【BFS】相关推荐
- 电子老鼠闯迷宫(BFS)
电子老鼠闯迷宫 Description 如下图12×12方格图,找出一条自入口(2,9)到出口(11,8)的最短路径. Input Output Sample Input 12 //迷宫大小 2 9 ...
- 算法实验三 【电子老鼠闯迷宫】分支限界
算法实验三 [电子老鼠闯迷宫]分支限界 1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元 ...
- 1042电子老鼠闯迷宫 (广搜)
1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色 ...
- NOJ 1042 电子老鼠闯迷宫
2016.11.3 [题目描述] 1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方 ...
- NOJ1042——算法实验三——电子老鼠闯迷宫
电子老鼠闯迷宫 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路.电子老鼠可以在路上向上.下.左.右行走,每一步走一个格子.现给定一 ...
- 【NOJ1042】【算法实验三】电子老鼠闯迷宫
1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部 ...
- (ssl1455)电子老鼠闯迷宫
电子老鼠闯迷宫 Time Limit:1000MS Memory Limit:65536K Total Submit:151 Accepted:107 Description 如下图12×12方格图 ...
- 1042 电子老鼠闯迷宫
电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路. ...
- NOJ电子老鼠闯迷宫
NOJ电子老鼠闯迷宫 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路.电子老鼠可以在路上向上.下.左.右行走,每一步走一个格子.现 ...
- 算法实验三 Problem B电子老鼠闯迷宫
Problem B 电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建 ...
最新文章
- 论文标题,这么写才算好!
- mybatis 使用jdbc_MyBatis笔记一
- Kotlin函数中默认参数
- [JavaScript]利用JavaScript控制table中row的显示
- 手持终端可以根据行业的功能要求进行定制
- python 嵌套数组_兴趣是最好的老师,快速入门:十分钟学会python
- 你的输入法都暴露了些啥?
- Spring Boot 发布 jar 包转为 war 包秘籍。
- Python二级笔记(6)
- win7 64 位用VMware安装Ubantu 20130908
- 2017-2018-1 20155227 《信息安全系统设计基础》第十一周学习总结
- spark源码分析之任务调度篇
- java排序算法学习(一)--冒泡排序
- html css:背景图片链接css写法
- 3. PDOStatement 对象
- SQL 通配符 、分页 功能的学习
- 给ubuntu设置静态ip —— How to set static IP Address in Ubuntu Server 16.04
- WebAPI HelpPage出现Failed to generate the sample for media type 'application/x-www-form-urlencoded'. 错
- 邮件服务器mx记录,学习邮件服务器之MX记录
- 测试网上哪款软件最好,手机测试软件哪款好用?4款测试软件推荐
热门文章
- mysql导入文件_mysql导入txt文件
- php抓取网页内容实例,php中抓取网页内容的实例详解
- 用python+vue+node开发单页面网站
- spring的控制反转和依赖注入讲解
- C++惨遭吐槽?最难学的编程语言TOP5出炉
- %3c故乡%3e中语言描写的作用是什么,语言描写的作用
- fifa足球世界服务器正在维修,FIFA足球世界
- 【众智实验二】山东大学软件学院众智实验二、友谊悖论验证(java)
- vscode关闭C/C++红色波浪线
- 八皇后,N皇后及其变种问题