题目描述

X星球的一处迷宫游乐场建在某个小山坡上。它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,R表示走到右边的房间,U表示走到上坡方向的房间,D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。
迷宫地图如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
请你计算一下,最后,有多少玩家会走出迷宫? 而不是在里边兜圈子。

输出

输出一个整数表示答案
 

提示

为方便理解,可参考此图

答案:31

DFS:

#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
#include<string.h>
using namespace std;
char a[][];
int vis[][];
int ans = ;
void dfs(int i, int j)
{
if (i < || i> || j < || j>) //迷宫的出口
{
ans++;
return;
}
else
{
if (vis[i][j]) return; //如果已经搜过,直接返回 vis[i][j] = ; //标记已搜索 if (a[i][j] == 'L')
dfs(i, j - );
if (a[i][j] == 'R')
dfs(i, j + );
if (a[i][j] == 'U')
dfs(i - , j);
if (a[i][j] == 'D')
dfs(i + , j);
}
}
int main()
{
int i, j;
for (i = ; i < ; i++)
for (j = ; j < ; j++)
cin >> a[i][j]; for (i = ; i < ; i++)
for (j = ; j < ; j++)
{
memset(vis, , sizeof(vis)); //搜索每一个房间时,初始化搜搜数组
dfs(i, j);
}
cout << ans << endl;
return ;
}

暴力:

#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
#include<string.h>
using namespace std;
char a[][],c[][];
int vis[][];
int ans = ;
int main()
{ for (int i = ; i < ; i++)
{
for(int j=;j<;j++)
{
cin>>a[i][j];
c[i][j]=a[i][j];
}
} for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
int x = i, y = j;
memset(vis, , sizeof(vis));
while ()
{ if (a[x][y] == 'U')
{
x = x - ;
if (x < || x> || y < || y>)
{
ans++;
c[i][j]='#';
break;
}
if (vis[x][y] == )
vis[x][y] = ;
else
break;
}
if (a[x][y] == 'L')
{
y = y - ;
if (x < || x> || y < || y>)
{
ans++;
c[i][j]='#';
break;
}
if (vis[x][y] == )
vis[x][y] = ;
else
break;
}
if (a[x][y] == 'R')
{
y = y + ;
if (x < || x> || y < || y>)
{
ans++;
c[i][j]='#';
break;
}
if (vis[x][y] == )
vis[x][y] = ;
else
break;
}
if (a[x][y] == 'D')
{
x = x + ;
if (x < || x> || y < || y>)
{
ans++;
c[i][j]='#';
break;
}
if (vis[x][y] == )
vis[x][y] = ;
else
break;
} }
}
}
cout << ans << endl;
// for(int i=0;i<10;i++)
// {
// for(int j=0;j<10;j++)
// cout<<c[i][j];
// cout<<endl;
// }
return ;
}

[蓝桥杯2017初赛]迷宫 DFS的更多相关文章

  1. 蓝桥杯2019初赛]迷宫(dfs版本)

    传送门 大意: 题目的意思还是模板的搜索,不同的是我们要记录路径了,而且是最短字典序最小的路径. 思路: 1.对于字典序最小,也就是说我们要尽量先往下走,然后是左- 这个很简单,因为在dfs中是顺序枚 ...

  2. [蓝桥杯2017初赛]青蛙跳杯子 BFS

    题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...

  3. [蓝桥杯2017初赛]Excel地址

    题目描述 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,.... 当然Excel的最 ...

  4. [蓝桥杯2017初赛]k倍区间 前缀和

    题目描述 给定一个长度为N的数列,A1, A2, ... AN. 如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...

  5. [蓝桥杯2017初赛]跳蚱蜢 BFS

    题目描述 如图所示: 有9只盘子,排成1个圆圈.其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8.每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空 ...

  6. 蓝桥杯---数独(模拟 || dfs)

    [编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...

  7. [蓝桥杯2018初赛]小朋友崇拜圈(dfs找环)

    传送门 思路: 题意大意:n条有向边,找出最大环. 我们发现,如果一个小朋友没有被任何人崇拜,那么他一定不位于环中.为此我们可以设置一个indug数组预处理.如果2被崇拜了那么indug[2]就加加, ...

  8. 2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)

    这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 正解类似:POJ-3984 迷宫问题 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔 ...

  9. [蓝桥杯]2017蓝桥省赛B组题目及详解

    /*——————————————————————————————————————————————————————————— [结果填空题]T1 (分值:5) 题目:购物单 小明刚刚找到工作,老板人很好 ...

随机推荐

  1. linux日常运维工作

    Linux的使用环境也日趋成熟,各种开源产品络绎不绝,大有百花齐放的盛景,那么当Linux落地企业,回归工作时,我们还要面对这Linux运维方面的诸多问题,今天我们特意组织一场有关Linux 在企业运 ...

  2. linux 下部署web 程序

    linux 下部署web 程序 1. 创建ucenter用户 一般情况下,发布应用程序都不是使用root用户的,需要创建一个普通用户来发布程序: 创建ucenter用户: useradd -d /uc ...

  3. 用Eclipse+Maven+Jetty构建Java Web开发环境(详细笔记)

    (软件环境) 『系统』Windows 10 x64 『JAVA』JDK 1.8.0_91 『Eclipse』 Eclipse-oxygen 『Maven』 apache-maven-3.6.3 『Je ...

  4. JS高级---实例对象和构造函数之间的关系

    实例对象和构造函数之间的关系:   1. 实例对象是通过构造函数来创建的---创建的过程叫实例化   2. 如何判断对象是不是这个数据类型?    1) 通过构造器的方式 实例对象.构造器==构造函数 ...

  5. BETWEEN

    选取介于两个值之间的数据范围内的值.这些值可以是数值.文本或者日期. 选取 alexa 介于 1 和 20 之间的所有网站: SELECT * FROM table ; NOT BETWEEN 显示不 ...

  6. ES6-三点运算符

    首先理解一下函数总的arguments变量,这个变量是函数内部自动生成的,他用来保存传入函数的实参,是一个伪数组. 例: function fun(a,b){ console.log(argument ...

  7. 【C语言】找出1000以内的水仙花数

    什么是水仙花数? 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153). 代码1: #include<stdio.h> ...

  8. 使用Eclipse工具开发Servlet(新建web项目->创建Servlet->部署和访问Servlet)

    在Eclipse工具栏中的[File]->[New]->[Other],打开如下菜单栏,选择Dynamic Web Project 点击下一步,如下图所示: 这里Dynamic web m ...

  9. jmeter beanshell 使用参数引用

    1.直接使用beanshell 写代码引用: 2. beanshell  引用.java 文件 3.beanshell 引用jar 包

  10. excel 练习玩具统计项目组excel日报

    import xlrd import xlwt import os,time import json from xlrd import xldate_as_tuple from datetime im ...