2017第八届蓝桥杯省赛C++A组【第一题:迷宫】

第一题

标题:迷宫

X星球的一处迷宫游乐场建在某个小山坡上。

它是由10x10相互连通的小房间组成的。

房间的地板上写着一个很大的字母。

我们假设玩家是面朝上坡的方向站立,则:

L表示走到左边的房间,

R表示走到右边的房间,

U表示走到上坡方向的房间,

D表示走到下坡方向的房间。

X星球的居民有点懒,不愿意费力思考。

他们更喜欢玩运气类的游戏。这个游戏也是如此!

开始的时候,直升机把100名玩家放入一个个小房间内。

玩家一定要按照地上的字母移动。

迷宫地图如下:

UDDLUULRUL

UURLLLRRRU

RRUURLDLRD

RUDDDDUUUU

URUDLLRRUU

DURLRLDLRL

ULLURLLRDU

RDLULLRDDD

UUDDUDUDLL

ULRDLUURRR

请你计算一下,最后,有多少玩家会走出迷宫?

而不是在里边兜圈子。

请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。

如果你还没明白游戏规则,可以参看一个简化的4x4迷宫的解说图:

在这里插入图片描述

代码

#include <bits/stdc++.h>
using namespace std;
char a[15][15] = {
"UDDLUULRUL",
"UURLLLRRRU",
"RRUURLDLRD",
"RUDDDDUUUU",
"URUDLLRRUU",
"DURLRLDLRL",
"ULLURLLRDU",
"RDLULLRDDD",
"UUDDUDUDLL",
"ULRDLUURRR",
}; 
int ans = 0;
bool vis[15][15];
void solve(int x,int y)
{
	int tx = x, ty = y;
	memset(vis,false,sizeof(vis));
	int cnt = 0;
	while(1) {
		if(vis[x][y]) return;//说明会死循环,出不去。
		vis[x][y] = true; 
		switch (a[x][y]) {
			case 'R':++y;if(y>=10){++ans;cout<<tx<<","<<ty<<endl;return;}break;
			case 'L':--y;if(y<0){++ans;cout<<tx<<","<<ty<<endl;return;}break;
			case 'D':++x;if(x>=10){++ans;cout<<tx<<","<<ty<<endl;return;}break;
			case 'U':--x;if(x<0){++ans;cout<<tx<<","<<ty<<endl;return;}break;			
		}
	}	
} 
int main()
{
	for(int i=0;i<10;++i)
		for(int j=0;j<10;++j)
			solve(i,j);
	cout<<ans<<endl;
	return 0;
}


输出样例

0,0
0,4
0,5
0,6
0,7
0,8
0,9
1,0
1,6
1,7
1,8
1,9
6,7
6,8
7,6
7,7
7,8
7,9
8,2
8,3
8,6
8,7
8,8
8,9
9,2
9,3
9,4
9,6
9,7
9,8
9,9
31

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值