最多字母路径 编程实现: 有一个 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),表示网格的行数和列数 接下来输入 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


正确答案:字母环序p->y->t->h->o->n->p。以每个格子为起点DFS回溯,只能走上下左右未访问过且字母为当前环后继的格,记录最长路径长度。N≤50,回溯可控。
答案解析
字母顺序映射:使用字典next_letter来定义每个字母的下一个字母,形成环形顺序。
输入处理:读取网格的行数N和网格数据,存储在二维列表grid中。
动态规划表初始化:dp表用于存储从每个单元格出发的最长路径长度,初始值为0。
DFS函数:dfs(i, j)函数使用深度优先搜索来计算从(i, j)出发的最长路径。如果dp[i][j]已经计算过,直接返回结果;否则,检查四个方向的相邻单元格,如果相邻单元格的字母是当前字母的下一个字母,则递归计算路径长度。
遍历所有起点:对网格中的每个单元格调用dfs函数,更新全局最长路径长度max_length。
输出结果:打印最长路径长度。
试卷来源:202403(第15届)蓝桥杯Python编程青少组(选拔赛_中/高级)真题