定義乙個二維陣列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解法12 5 9
4 87
try:解法2while 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
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 ...