迷宫

【题解】迷宫 OpenJ_Bailian - 2790

匿名 (未验证) 提交于 2019-12-02 23:34:01
A - 迷宫 OpenJ_Bailian - 2790 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。 Input 第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 <= n <= 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。 Output k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。 Sample Input 2 3 .## …# #… 0 0 2 2 5 … ###.# …#… ###… …#. 0 0 4 0 Sample Output YES NO 题解 #include<stdio.h> #include<string.h> int n,ha, la, hb, lb

Scratch之迷宫制作

匿名 (未验证) 提交于 2019-12-02 23:34:01
这节课,我们要完成的是迷宫 游戏 ,这里我们从 游戏 设计角度出发,游戏重点是处理游戏中 角色 和迷宫墙壁的碰撞问题,保证 角色 能够在迷宫中正常的移动。 首先了解下我们的游戏 素材 : 我们的小狗要去寻找蛋糕 操作提示:在游戏中,玩家 控制 角色的上、下、左、右移动,帮助角色一次次找到通往重点的路径,这就需要玩家不断的提升自己的经验和逻辑思维能力才能完成挑战,游戏中的角色只能在迷宫路径上移动,不能穿过墙壁这种规律在游戏中如何实现呢? <1>选择角色“终点”。给角色添加如下程序脚本,这段程序的功能是当程序开始运行,将角色“终点”的大小设置为一个合理的大小,将角色移动到我们想要的位置。 坐标 坐标 <3>接下来给“迷宫”添加第二段程序脚本(如下图)。这段程序的功能是将“迷宫”接收到广播的消息“下一关”时,角色“迷宫”切换到下一个造型,这样玩家完成了第一关后,游戏就会进行到下一关。 <4>角色迷宫的完整程序如下 <5>选择“小狗”,小狗在游戏中的作用是能够在迷宫中走来走去(上、下、左、右),当小狗碰到迷宫中的墙壁时需要停下来并且不能穿过墙壁,当小狗吃到“蛋糕”后,就会进入下一关。 同样,我们要对“小狗”进行一些设置,比如大小、位置 当玩家按下右移键时,“小狗”要面向90度 方向 向右侧移动,移动的过程中通过切换造型来让小狗有一个走动的过程 因为小狗每次移动3步,所以当小狗碰到迷宫墙壁时

迷宫BFS

匿名 (未验证) 提交于 2019-12-02 23:32:01
给定一个大小为N*M的迷宫。迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。如果不能到达,输出“不能走到那里”。(N,M<=50,起点,终点分别用S,G表示) 输入样例:N=5,M=5 #S### ..##. #.### ..### ..G## 输出:5 //#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <stdio.h> #include <string> #include <map> #include <set> #include <vector> #include <queue> #include <list> #include <sstream> #include <algorithm> #include <cstring> #include <iomanip> #include <cmath> using namespace std; const int maxn = 100 + 10; int n,m; int sx,sy,ex,ey; int dx[]={1,0,-1,0}; int dy[]={0,1,0,-1}; char mg[maxn][maxn]; bool vis[maxn][maxn]; struct

迷宫

匿名 (未验证) 提交于 2019-12-02 23:32:01
http://codeforces.com/problemset/problem/6/B import java.util.*; public class CF6B { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); char p = in.next().charAt(0); HashSet<Character> ans = new HashSet<Character>(); int[] di = {0,0,1,-1}; int[] dj = {1,-1,0,0}; char[][] map = new char[n][m]; for(int i = 0; i < n; i ++) map[i] = in.next().toCharArray(); for(int i = 0; i < n; i ++) { for(int j = 0; j < m; j ++) { if(map[i][j]!=p) continue; for(int k = 0; k < 4; k ++) { int ni = i + di[k]; int nj = j + dj[k]; if(ni>-1&&ni<n&

dfs-bfs-迷宫问题

匿名 (未验证) 提交于 2019-12-02 23:26:52
定义一个二维数组: 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) 典型的模板题 dfs代码: # include <string.h> # include <iostream> using namespace std ; const int dir [ ] [ 2 ] = { 1 , 0 , 0 , 1 , - 1 , 0 , 0 , - 1 } ; char mp [ 10 ] [ 10 ] ; struct node { int x ; int y ; } ; node l [ 30 ] , m [ 30

1255:迷宫问题

匿名 (未验证) 提交于 2019-12-02 23:03:14
#include<iostream> #include<cstdio> using namespace std; int map[1000][1000]; int quex[1000]; int quey[1000]; int pre[1000]; int a[1000]; int b[1000]; int dx[4]={0,0,-1,1}; int dy[4]={-1,1,0,0}; void print(int d) { } int main() { } 文章来源: 1255:迷宫问题

DFS迷宫

匿名 (未验证) 提交于 2019-12-02 23:03:14
H.YXY的迷宫 时间限制: C/C++ 10000ms; Java 20000ms 内存限制: 65535KB 通过次数: 11 总提交次数: 28 问题描述 YXY给出了一个仅由数字0与1组成的n*n的迷宫,你可以站在这个迷宫的某一格上,若你当前所处位置为数字0,那么你可以移动到相邻4个方向(上下左右)上数字为1的格子上。同样若你当前所处位置为数字1,那么你可以移动到相邻4个方向上数字为0的格子上。对于迷宫的一个格子,询问由这一格可以到达的格子的总数是多少(包括自身的初始位置)。 输入描述 第一行输入两个正整数n和m。n表示将要输入的迷宫为n*n,m表示共有m次询问。(保证1<=n<=1000, 1<=m<=100000 ) 接下来输入n行,每行输入n个字符。(输入保证字符均为为0或1,字符之间没有空格) 接下来输入m行,每行输入两个正整数i,j。表示询问从第i行第j列这个格子出发,一共能够到达格子的总数。 输出描述 输出共m行,每行输出一个数表示对应询问的答案。 样例输入 2 2 01 10 1 1 2 2 样例输出 4 4 来源 中北大学2018年新生赛 提示 样例解释: 对于 01 10 这个迷宫 左上角的0(第1行第1列)可以首先可以到达两个1(第1行第2列)(第2行第1列)的位置,然后这两个1又都可以到达两个0(第1行第1列)(第2行第2列)的位置。 所以从(1,1

P1141 01迷宫

匿名 (未验证) 提交于 2019-12-02 22:56:40
#include<bits/stdc++.h> using namespace std; const int MAXN=1010; int a[MAXN][MAXN]={}; //int cnt=0,maxcnt=0; int ty[4]={1,0,-1,0}; int tx[4]={0,1,0,-1}; int vis[MAXN][MAXN]; int n,m; int st,ed; void dfs(int x,int y,int &cnt){ cnt++; for(int i=0;i<4;i++){ if(a[x][y]!=a[x+tx[i]][y+ty[i]]&&vis[x+tx[i]][y+ty[i]]==0&&(x+tx[i]>=0&&x+tx[i]<n&&y+ty[i]>=0&&y+ty[i]<n)){ vis[x+tx[i]][y+ty[i]]=1; dfs(x+tx[i],y+ty[i],cnt); } } } int main() { freopen("in.txt","r",stdin);freopen("out.txt","w",stdout); cin>>n>>m; for(int i=0;i<n;i++){ string s;cin>>s; for(int j=0;j<n;j++){ a[i][j]=s[j]-'0'; } } for(int i=0;i

Python 四大迷宫生成算法实现(5): 图形显示实现

匿名 (未验证) 提交于 2019-12-02 22:11:45
python迷宫生成算法:图形显示实现 迷宫图形显示简介 代码介绍 GameSearch.py 完整代码 迷宫图形显示简介 使用pygame做了一个4种迷宫算法的图形显示,如下图,有4个按钮,可以用鼠标点击按钮来切换使用哪种算法来生成迷宫。按任意键来生成迷宫,同时加入了A* 寻路算法,来表现4种算法生成迷宫的不同,红色点是起点和终点,绿色点是使用A*算法获取的从起点到终点的路线。 代码介绍 代码实现有4个文件 GameMap.py : 保存迷宫基本信息的地图类,在前面的迷宫算法介绍中有说明,这边独立成一个文件。 MazeGenerator.py : 这个是四种迷宫算法的实现代码,放在一个文件中。 AStarSearch.py : A* 算法的实现,在前面的A* 算法文章中有介绍。 GameSearch.py : 用pygame代码写的迷宫的图形显示 前面三个文件都已经说过, 这边主要讲下GameSearch.py GameSearch.py 迷宫配置参数 , REC_SIZE 每个迷宫单元的大小,REC_WIDTH 和 REC_HEIGHT是迷宫的宽度和长度,可以任意修改,但是安装迷宫生成算法的要求,必须是奇数。 REC_SIZE = 10 REC_WIDTH = 51 # must be odd number REC_HEIGHT = 51 # must be odd

使用堆栈进行迷宫求解——穷举法

我是研究僧i 提交于 2019-12-02 10:58:04
迷宫求解 求解思路 利用计算机进行迷宫求解的最简单的方法就是穷举法。 具体思路如下(参考清华大学出版社数据结构C语言版): 首先,从入口出发,顺着某一方向向前探索,若能走通,就继续前进,若走不通则按原路返回,换个方向继续前进,直至所有可能的通路都走过为止。该思路与栈的特点十分相似,按照一定的顺序方向,每走一步将该步压入栈,如果遇到不能走或者下一步方向的方格已经走过时,就把当前步弹出栈。直到走到迷宫的终点为止。 相关代码 //base.h # ifndef BASE_H # define BASE_H # include <cstdio> # include <cstdlib> # include <malloc.h> # define TRUE 1 # define FALSE 0 # define OK 1 # define ERROR 0 # define INFEASIBLE -1 # define OVERFLOW -2 typedef int Status ; typedef int DirectiveType ; typedef struct { int row ; int col ; } PosType ; //通道块类型,代表的坐标(行,列) typedef struct { int step ; //在路径中的序号 PosType seat ; //位置坐标