數字遊戲 》迷宮問題 蛇形矩陣

2021-10-08 22:57:35 字數 4369 閱讀 7384

定義乙個二維陣列n*m(其中2<=n<=10;2<=m<=10),如5 × 5陣列下所示: 

int maze[5][5] = ;

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。入口點為[0,0],既第一空格是可以走的路。

input

乙個n × m的二維陣列,表示乙個迷宮。資料保證有唯一解,不考慮有多解的情況,即迷宮只有一條通道。

output

左上角到右下角的最短路徑,格式如樣例所示。

sample input

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

sample output

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

輸入兩個整數,分別表示二位陣列的行數,列數。再輸入相應的陣列,其中的1表示牆壁,0表示可以走的路。資料保證有唯一解,不考慮有多解的情況,即迷宮只有一條通道。

左上角到右下角的最短路徑,格式如樣例所示。

5 5

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

(0,0)

(1,0)

(2,0)

(2,1)

(2,2)

(2,3)

(2,4)

(3,4)

(4,4)

解法1

rows = 0  # 迷宮行數

cols = 0 # 迷宮列數

flag = false # 回退標誌

# 判斷下乙個節點

def go_next(site, maze, path):

if not (0 <= site[0] < rows and 0 <= site[1] < cols): # 邊界

return false

if maze[site[0]][site[1]] == 1: # 牆壁

return false

if maze[site[0]][site[1]] == 2: # 回退

return false

if site in path[:-1]:

return false

return true

# 取得結果

def go(site_now, path, site_exit, maze):

global flag

site = site_now

if not flag:

else:

path.pop()

for i in [(1, 0), (0, 1), (-1, 0), (0, -1)]:

site = (path[-1][0] + i[0], path[-1][1] + i[1])

if go_next(site, maze, path):

break

if i in [(0, -1)]:

flag = true # 需要回退

maze[path[-1][0]][path[-1][1]] = 2

else:

flag = false # 不回退

if path[-1] not in [site_exit]:

go(site, path, site_exit, maze)

try:

while true:

# 當前軌道, 所有軌道, 最優軌道(結果)

path, paths, res = , ,

flag = false # 回退標誌

rows, cols = map(int, input().split())

maze =

for i in range(rows):

go((0, 0), path, (rows - 1, cols - 1), maze)

if path[-1] in [(rows - 1, cols - 1)]:

if len(paths) > 0:

res = sorted(paths)[0]

for i in res:

print('(%d,%d)' % (i[0], i[1]))

except:

pass

解法2

try:

while true:

row,col = map(int,input().split())

maze =

for i in range(row):

queue = [[0,0]]

maze[0][0] = 1

while queue:

x,y = queue.pop(0)

if x == row-1 and y == col-1:

break

if x+1 < row and maze[x+1][y] == 0:

maze[x+1][y] = maze[x][y]+1

if y+1 < col and maze[x][y+1] == 0:

maze[x][y+1] = maze[x][y]+1

if x-1 >= 0 and maze[x-1][y] == 0:

maze[x-1][y] = maze[x][y]+1

if y-1 >= 0 and maze[x][y-1] == 0:

maze[x][y-1] = maze[x][y]+1

result = [[row-1,col-1]]

for i in range(maze[-1][-1]-1,0,-1):

temprow = result[0][0]

tempcol = result[0][1]

if temprow-1>=0 and maze[temprow-1][tempcol] == i:

result.insert(0,[temprow-1,tempcol])

elif tempcol-1>=0 and maze[temprow][tempcol-1] == i:

result.insert(0,[temprow,tempcol-1])

elif temprow+1蛇形矩陣是由1開始的自然數依次排列成的乙個矩陣上三角形。

樣例輸入

樣例輸出

1 3 6 10 15

2 5 9 14

4 8 13

7 12

介面說明

原型void getresult(int num, char * presult);

輸入引數:

int num:輸入的正整數n

輸出引數:

int * presult:指向存放蛇形矩陣的字串指標

指標指向的記憶體區域保證有效

返回值:

void

輸入正整數n(n不大於100)

輸出乙個n行的蛇形矩陣。

4

1 3 6 10

2 5 9

4 87

解法1

try:

while true:

res, num = , int(input())

for i in range(1, num + 1):

row =

for j in range(i, num + 1):

if not row:

if not res:

else:

else:

for i in res:

print(" ".join([str(j) for j in i]))

except:

pass

解法2

while true:

try:

n, curnum = int(input()), 1

res = [[0 for i in range(n)] for j in range(n)]

for i in range(n):

for j in range(i + 1):

res[i - j][j] = curnum

curnum += 1

for i in res:

print(" ".join(map(str, (filter(lambda i: i != 0, i)))))

except:

break

遊戲迷要心碎,育碧暫無計畫推出《刺客信條VR》

育碧設計師表示 上爆出的並不是官方的東西,只是他的大學和育碧之間的乙個合作專案。作為育碧旗下最火熱的ip遊戲之一,刺客信條 不僅僅有了電影版本,最近有訊息透露,育碧正在開發該遊戲的vr版本,但是很快就被育碧設計師打臉,表示目前並沒有計畫推出 刺客信條vr 此前,育碧巴黎分部的ui和使用者體驗設計師m...

數字迷宮小遊戲

本案例為實現動態的重新整理dos 介面,使用使用者控制頭像 消滅 視窗中出現的數字 無固定順序 的遊戲,來使學員加深對一維陣列 二維陣列 迴圈語句 選擇程式設計以及相關系統函式的使用。a 選擇程式設計 b 迴圈程式設計 c 使用者 螢幕視窗的輸入輸出 d 相關系統函式 e 一維 二維陣列 4天c語言...

演算法題 數字遊戲問題 Python

給定兩個正數m,n 0 m n 現在求,從m開始,只能加1,或者乘以2最後得到n的最小操作次數。很顯然是乙個動態規劃題目,首先考慮乙個m 1的情況,不難得出dp方程 dp 1 0 n為偶數 dp n min dp n 1 1,dp n 2 1 n為奇數 dp n min dp n 1 1,dp n ...