2017年蓝桥杯省赛CC++A组题⽬转载⾄:
本题解不⼀定全对,欢迎指出错误。
第⼀题
1.标题:迷宫
X星球的⼀处迷宫游乐场建在某个⼩⼭坡上。
它是由10x10相互连通的⼩房间组成的。
房间的地板上写着⼀个很⼤的字母。
我们假设玩家是⾯朝上坡的⽅向站⽴,则:
L表⽰⾛到左边的房间,
R表⽰⾛到右边的房间,
U表⽰⾛到上坡⽅向的房间,
各奔前程
D表⽰⾛到下坡⽅向的房间。
X星球的居民有点懒,不愿意费⼒思考。
他们更喜欢玩运⽓类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放⼊⼀个个⼩房间内。
玩家⼀定要按照地上的字母移动。
迷宫地图如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
qq密码URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
请你计算⼀下,最后,有多少玩家会⾛出迷宫?
⽽不是在⾥边兜圈⼦。
请提交该整数,表⽰⾛出迷宫的玩家数⽬,不要填写任何多余的内容。
如果你还没明⽩游戏规则,可以参看⼀个简化的4x4迷宫的解说图:
图1迷宫
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
char maps[30][30] = {};
bool book[30][30] = {};
int cnt = 0;
void dfs(int stx, int sty)
{
if(stx < 1 || stx > 10 || sty < 1 || sty > 10) {
cnt++;
return;
}
if(!book[stx][sty] && maps[stx][sty] == 'U') {
book[stx][sty] = true;
dfs(stx - 1, sty);
//book[stx][sty] = fal;
}
if(!book[stx][sty] && maps[stx][sty] == 'D') {
book[stx][sty] = true;
dfs(stx + 1, sty);
//book[stx][sty] = fal;
}
if(!book[stx][sty] && maps[stx][sty] == 'L') {
book[stx][sty] = true;
dfs(stx, sty - 1);
//book[stx][sty] = fal;
}
if(!book[stx][sty] && maps[stx][sty] == 'R') {
book[stx][sty] = true;
dfs(stx, sty + 1);
//book[stx][sty] = fal;
}
}
int main()
{
///10 9
char ch;
for(int i = 1; i <= 10; i++)
{
for(int j = 1; j <= 10; j++)
{
cin >> maps[i][j];
}
getchar();
}
for(int i = 1; i <= 10; i++)
{北卡罗莱纳大学
for(int j = 1; j <= 10; j++)
{
//book[i][j] = true;
dfs(i, j);
book[i][j] = fal;
小组鉴定
memt(book, 0, sizeof(book));
}
}
cout << cnt << endl;
return 0;
}
/**
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
*/
答案:31
第⼆题 跳蚱蜢
有9只盘⼦,排成1个圆圈。
其中8只盘⼦内装着8只蚱蜢,有⼀个是空盘。
我们把这些蚱蜢顺时针编号为 1~8
每只蚱蜢都可以跳到相邻的空盘中,
也可以再⽤点⼒,越过⼀个相邻的蚱蜢跳到空盘中。
请你计算⼀下,如果要使得蚱蜢们的队形改为按照逆时针排列,
并且保持空盘的位置不变(也就是1-8换位,2-7换位,...),⾄少要经过多少次跳跃?注意:要求提交的是⼀个整数,请不要填写任何多余内容或说明⽂字。
图2. 跳蚱蜢
思路:⼴搜
韩絮
爱虫代码:
#include<cstdio>
#include <cstdlib>
#include <iostream>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
int minn = 999999999, cnt = 0;
int nexts[4] = {1, 2, -1, -2};
map<string, int>mps;
struct node
{
string str;
int step;
node(string st, int ss = 0)
{
str = st;
step = ss;我和表姐
}
node() {};
};
bool check(string str)
{
return (str == "087654321" || str == "876543210");
}
int getz(string str)
五步抑扬格
{
for(int i = 0; i < str.size(); i++)
{
if(str[i] == '0') return i;
}