历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 2024年1月编程题(11)

学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 汇总


【题目描述】

有一个N行N列的网格,网格里的每个格子都有一个字母,每个字母只能是p、y、t、h、o、n中的字母。

一台机器人按照以下规划移动:

1、起始位置可以选择网格中任意一个格子,起始位置的字母不一定为p;

2、每次只能向上下左右相邻的任意一个格子移动一格,并且经过的格子不能再次经过;

3、每次移动的格子中的字母必须按照以下环形的顺序,如下图所示:

在这里插入图片描述

例如:当前字母为t,那么移动的下一个格子中的字母必须为h。

给定N行N列的网格,请计算机器人最多可以经过多少个字母。

例如:N=4,4行4列的网格中的字母如左图,可经过最多字母的移动路径如右图:

在这里插入图片描述

以第三行第二列的h作为起始位置,按照h->o->n->p->y->t->h的顺序移动,机器人经过的字母最多,可以经过7个字母。

【输入】

第一行输入一个整数N( 2 ≤ N ≤ 50 2\le N\le 50 2N50),表示网格的行数和列数

接下来输入N行,每行N个字母,每个字母只能是p、y、t、h、o、n中的字母,字母之间以一个空格隔开

【输出】

输出一个整数,表示机器人最多可以经过多少个字母

【输入样例】

4
y n p p 
t o y t
n h p h
n h o t

【输出样例】

7

【代码详解】

在这里插入图片描述

n = int(input())
a = [['' for i in range(n+1)] for i in range(n+1)]
dict = {'p':0, 'y':1, 't':2, 'h':3, 'o':4, 'n':5}
dx = [-1,0,1,0]
dy = [0,1,0,-1]
for i in range(1, n+1):
    tmp = [i for i in input().split()]
    for j in range(1, n+1):
        a[i][j] = tmp[j-1]
maxn = 0

def dfs(x, y, cnt):
    global maxn
    vis[x][y] = 1
    maxn = max(maxn, cnt)
    for i in range(4):
        xx = x + dx[i]
        yy = y + dy[i]
        if 1<=xx<=n and 1<=yy<=n and vis[xx][yy]==0 and (dict[a[xx][yy]]-dict[a[x][y]]+6)%6==1:
            dfs(xx, yy, cnt+1)
    return cnt


for i in range(1, n+1):
    for j in range(1, n+1):
        vis = [[0 for i in range(n + 1)] for i in range(n + 1)]
        dfs(i,j,1)
print(maxn)

【运行结果】

4
y n p p 
t o y t
n h p h
n h o t
7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值