poj3984 迷宫问题 bfs_一七得七的博客-程序员宅基地

技术标签: 广搜bfs  aspan idtransmark st  pojspan idtransmark  

链接:http://poj.org/problem?id=3984

迷宫问题
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 16884   Accepted: 10073

Description

定义一个二维数组:
int maze[5][5] = {

	0, 1, 0, 0, 0,

	0, 1, 0, 1, 0,

	0, 0, 0, 0, 0,

	0, 1, 1, 1, 0,

	0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

比赛题,但是曹喆学长暑假已经讲过一次了,而且以为内上课也没有比赛,暂且把之前敲得贴上来吧

bfs,要求打印路径,其实用一个数组存就好

代码:

#define _CRT_SBCURE_MO_DEPRECATE
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<string>
#include<string.h>
#include<set>
#include<queue>
#include<stack>
#include<functional>  
using namespace std;

const int MAXN = 100000 + 10;
int n, sx, sy, ex, ey;
int vis[305][305];
int dirt[8][2] = { { 1,0 },{ 0, 1 },{ -1,0 },{ 0, -1 } };
int x[10][10];//迷宫



struct node {
	int x;
	int y;
	int j;
	int step[105][3];
};

int judge(int x, int y) {
	if (x < 0 || x>5 || y < 0 || y>5) return 1;
	else return vis[x][y];
}
void bfs() {
	sx = 0; sy = 0;
	ex = 4; ey = 4;
	memset(vis, 0, sizeof(vis));
	queue<node>q;
	node a, b, next;
	a.x = sx;
	a.y = sy;
	a.j = 0;
	a.step[0][0] = a.x;
	a.step[0][1] = a.y;
	//cout << sx << sy;
	q.push(a);
	vis[sx][sy] = 1;
	while (!q.empty()) {
		b = q.front();
		q.pop();
		if (b.x == ex&&b.y == ey) {
			for (int k = 0; k < b.j; k++)
				cout << "(" << b.step[k][0] << ", " << b.step[k][1] << ")" << endl;
			cout << "(4, 4)" << endl;
		}
		for (int i = 0; i < 4; i++) {
			next = b;
			next.x = b.x + dirt[i][0];
			next.y = b.y + dirt[i][1];
			if (judge(next.x, next.y) == 1)continue;
			if (x[next.x][next.y] == 1)continue;//p判断不是墙
			(next.j)++;		
			next.step[next.j][0] = next.x;
			next.step[next.j][1] = next.y;
			q.push(next);
			vis[next.x][next.y] = 1;
		}
	}
		
}

int main()
{
	for (int i = 0; i<5; i++) {
		scanf("%d %d %d %d %d", &x[i][0], &x[i][1], &x[i][2], &x[i][3], &x[i][4]);
	}
	bfs();
	//system("pause");
	return 0;
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/migu77777/article/details/52950145

智能推荐

数据库 -> 对慢查询都怎么优化?_哪种方法能够优化慢查询-程序员宅基地

对慢查询都怎么优化?检查慢日志是否开启SHOW VARIABLES LIKE '%slow%';开启慢查询日志方法一: 临时有效/* 开启慢日志 */mysql> set global slow_query_log=on;Query OK, 0 rows affected (0.08 sec)/* 设置慢查询时间阈值 -> sql查询数据超过了就打印日志 */mysql> set global long_query_time=3600;Query OK, 0 _哪种方法能够优化慢查询

ubuntu16.04下安装GVIM,亲测可用_ubuntu离线安装gvim-程序员宅基地

一、安装首先,安装依赖sudo add-apt-repository ppa:fcwu-tw/ppa (该ppa属于launchpad.net,墙内连接不太稳定,多次失败请自行寻找方法翻越。)然后,更新sudo apt-get update先安装vim(没有图形界面)sudo apt-get install vim再安装gvim(有独立的界面,可以独立运行)sudo a..._ubuntu离线安装gvim

java 参数检查,关于java:程序员你如何检查参数的合法性-程序员宅基地

作为程序员的你,代码中最多的就是各种办法了,你是如何对参数进行校验的呢?背景大部分的办法和构造函数对传入的参数值有一些限度,比方:常见的索引值必须是非正数,对象援用不能为空。你应该应用清晰的文档来标注所有的这些限度,而后在办法体开始的中央强制他们查看。应该在谬误产生的时候尽快的查看进去,这是根本准则。如果你不这么做,当谬误产生的时候,谬误将不会被检测进去,这让定位谬误的源头变得更艰难。如果一个非法...

数字政府 2.0 时代,政府应用开发平台如何加码中国新基建?-程序员宅基地

文 | 曾响铃来源 | 科技向令说(xiangling0815)互联网思维创新、前沿技术应用逐步推动传统政府向数字化、智能化趋势加速转型、变革。伴随着国家大力发展新基建的浪潮,数字政府的建设及推广已然成为“数字中国”建设的关键内容,并在服务民众与社会的过程中持续迭代。4月 28日,以智慧龙岗为示范,中软国际邀请了政数局专家、信通院专家、华为专家以及其他行业伙伴实地考察龙岗智慧中心,共同探讨数字政府的创新与实践。这也将成为各地政府、市场企业以及媒体观察者进一步了解数字政府、洞察数字建设的窗口。

HDU 1166-程序员宅基地

原文链接: HDU 1166 上一篇: ...

hualinux 进阶 vue 3.1:vue cli手工创建Vue router-程序员宅基地

目录一、vue-cli安装二、使用vue cli手工安装带router功能的项目2.1 以手工方式创建一个vue项目2.2.1 选择安装方式2.1.2 选择安装的组件2.2.3 选择版本2.2.4 选择历史模式2.2.5 选择css预处理器2.2.6 选择配置2.2.7选择2.2.8 选择配置文件2.2.9 是否保存为预设2.2.10 安装2.2.11 安装完成三、vue router目录结构介绍使用vue cli默认安装是没有路由功能的,.

随便推点

Java:一步步带你深入了解神秘的Java反射机制_产品靠什么反射-程序员宅基地

前言在 Java中,反射机制(Reflection)非常重要,但对于很多开发者来说,这并不容易理解,甚至觉得有点神秘 今天,我将献上一份 Java反射机制的介绍 &amp; 实战攻略,希望你们会喜欢。 目录1. 简介 定义:Java语言中 一种 动态(运行时)访问、检测 &amp; 修改它本身的能力 作用:动态(运行时)获取类的完整结构信息 &amp; 调用对象..._产品靠什么反射

Android项目中Git工具的使用_安卓上的git-程序员宅基地

git工具的常规安装与使用说明,如果想了解git命令的学习,请阅读博文[史上最全Git命令使用手冊](https://blog.csdn.net/luo_boke/article/details/127026828)_安卓上的git

必须关注的考研英语外刊公众号合集(不看后悔)-程序员宅基地

必须关注的考研英语外刊公众号合集(不看后悔)_考研英语外刊

Python入门基础篇 No.24 —— 列表_元素的访问_元素的出现次数统计_成员资格判断_已知a【1,2,3,4,5】能访问元素3-程序员宅基地

Python入门基础篇 No.24 —— 列表_元素的访问_元素的出现次数统计_成员资格判断文章目录Python入门基础篇 No.24 —— 列表_元素的访问_元素的出现次数统计_成员资格判断前言一、通过索引直接访问元素二、index()获得指定元素在列表中首次出现的索引三、count()获得指定元素在列表中出现的次数四、len()返回列表长度五、成员资格判断总结前篇:Python入门基础篇 No.23 —— 列表_元素删除的3种方式_删除本质是数组元素拷贝前言一、通过索引直接访问元素我们_已知a【1,2,3,4,5】能访问元素3

Davinci DSP6467T处理能力测试-程序员宅基地

终于跑通了一个ARM端视频采集,DSP端视频处理的程序。我测试了DSP的处理能力。他的计算能力远远超过ARM端。在保证实时处理的前提下,ARM端能够对每帧图像处理10万条指令。而DSP端能够对每帧图像处理100百万条指令(也就是每秒大约处理2500百万指令),是ARM计算能力的1000倍。根据前人的研究结果,6446在流水线技术下可以达到4800MIPS(MIPS:百万条指令每秒)。听起来好像很强大,但其实细细一算,实际应用中并不是那么乐观,在实时要求下,一秒钟要处理25帧,每一帧7

SQL SERVER数据库中勒索病毒 SQL数据库中病毒恢复数据_sqlrepairma.rar-程序员宅基地

SQL SERVER数据库中勒索病毒 SQL数据库中病毒恢复数据最近客户中勒索病毒的很多,大家可以下载我们的恢复工具来预览重要的数据。最新勒索病毒解密及恢复服务 扩展名一般不限制。最近常见的有.java.CHAK.RESERVE.{[email protected]}XX .xx.GOTHAM.aleta.TRUE.rapid..._sqlrepairma.rar