任务描述本关任务:找出赢得给定 Snake and Ladder 棋盘游戏所需的最少投掷次数规则说明起始位置为0棋盘上的格子编号为1~n终点为n依据骰子的数字确定前移的步数如果恰好到达梯子的底部则自动前移至梯子顶部如果恰好遇到蛇的头部则自动回退至蛇的尾部。编程要求根据提示在右侧编辑器补充代码首先输入棋盘上的格子数量n然后输入蛇的数量s以及每一条蛇的首尾位置x和y接着输入梯子的数量t以及每一个梯子的
n=int(input()) #输入格子数量 s=int(input()) #输入蛇的数量 snakes=[] #创建蛇的数组 for i in range(s): x,y=map(int,input().split()) #输入每一条蛇的首尾位置 snakes.append((x,y)) #将蛇的首尾位置加入数组中 t=int(input()) #输入梯子的数量 ladders=[] #创建梯子的数组 for i in range(t): j,k=map(int,input().split()) #输入每一个梯子的底部和顶部位置 ladders.append((j,k)) #将梯子的底部和顶部位置加入数组中
def min_moves(n, snakes, ladders): queue=[(0,0)] #队列中每个元素表示当前位置和投掷次数,初始位置为0,初始投掷次数为0 visited=set([0]) #记录已经访问过的位置 while queue: pos, moves=queue.pop(0) #取出队列中的第一个元素 for i in range(1,7): #投掷骰子 new_pos=pos+i if new_pos==n: #如果到达终点,返回投掷次数 return moves+1 if new_pos>n: #如果越界,跳过本次循环 continue if new_pos in visited: #如果已经访问过,跳过本次循环 continue visited.add(new_pos) #标记为已访问 for s in snakes: #如果遇到蛇,回退至蛇的尾部 if new_pos==s[0]: new_pos=s[1] for l in ladders: #如果遇到梯子,前进至梯子的顶部 if new_pos==l[0]: new_pos=l[1] queue.append((new_pos,moves+1)) #将新的位置和投掷次数加入队列中 return -1 #如果无法到达终点,返回-1
print(min_moves(n, snakes, ladders)) #输出最少需要几次投掷骰子
原文地址: http://www.cveoy.top/t/topic/bv5G 著作权归作者所有。请勿转载和采集!