蓝桥杯真题玩具蛇
Posted 蔚尺丈八声
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯真题玩具蛇相关的知识,希望对你有一定的参考价值。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main
public static void main(String[] args)
/*
思路:
本题和路径之谜的题相似,也是dfs+回溯+剪枝:https://www.lanqiao.cn/problems/89/learning/
参照路径之谜的解法,以及相关题解:
https://blog.csdn.net/DratYu/article/details/115485220
可以得出本题的如下模板:
1、所需数据结构:
(1)一个二维数组存储格子标记路径是否访问过(1到n),相当于visit数组。
(2)两个数组分别存x和y坐标的方向坐标,用于引导路径自某点下左上右的移动。
(3)一个记录走过步数的变量step,用于终止条件的判断,也即记录了dfs向下走过多少层。
(4)一个记录有多个方案满足终止条件的变量ans。
2、代码结构:
记录总方案数的变量ans=0;
function dfs(x,y,step)
//当前状态 == 目的状态,即dfs截止条件
if(终止条件:step记录的步数达到了16)
记录总方案数的变量ans+1;
for((x,y)四个方向都试着走一遍)
用1、的(2)数组更新下一个方向(走下一步)的(x,y)坐标;
if(合法条件:如果下个格子未被访问,且下一步的(x,y)没有超出格子边界)
visit数组标记对下一步的格子(x,y)访问过;
对应下一步的格子(x,y)的靶数减1,用于控制路径朝向正确的方向;
dfs(下一步的(x,y)坐标,step+1) // 对下一步的格子继续四个方向的尝试
如果跳出了上面的dfs,说明不满足终止条件,那么此次尝试的方向不对,需要回溯,把visit数组对此方向下一步的格子(x,y)恢复访问状态;
*/
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
scan.close();
以上是关于蓝桥杯真题玩具蛇的主要内容,如果未能解决你的问题,请参考以下文章