cuốn sách gpt4 ai đã làm

python - 为什么这段代码做的是 closed[init[0]][init[1]] 而不是 closed[init[0]][init[0]]?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 06:36:35 27 4
mua khóa gpt4 Nike

Tôi đang đọc Chương trình tìm kiếm đầu tiên - Thuật toán Trí tuệ nhân tạo cho Robotics và tôi đang đọc mã Python của nó. Ở đây chúng tôi đã tạo một mảng kín để kiểm tra khi ô được mở rộng và không được mở rộng lại. Chúng tôi xác định một mảng được gọi là đóng và xác định kích thước của nó là lưới của chúng tôi. Tác giả nói nó có hai giá trị 0 và 1. 0 nghĩa là bật và 1 nghĩa là tắt nhưng mình thấy nó chỉ bằng 0 mà thôi.

Anh ta đánh dấu điểm bắt đầu là 0,0 bằng 1 cho đến khi anh ta không kiểm tra chúng, nhưng anh ta đặt tọa độ là 0 và 1 trên dòng này close[init[0]][init[1]] = 1. Tại sao anh ấy lại đặt 0 và 1 thay vì 0,0?

Mã python ở đây:

#định dạng lưới
# 0 = không gian có thể điều hướng
# 1 = không gian bị chiếm dụng

lưới=[[0,0,1,0,0,0],
[0,0,1,0,0,0],
[0,0,0,0,1,0],
[0,0,1,1,1,0],
[0,0,0,0,1,0]]

ban đầu = [0,0]
mục tiêu = [len(lưới)-1,len(lưới[0])-1]


delta=[[-1, 0], #up
[0,-1], #trái
[1, 0], #xuống
[0, 1]] #đúng

delta_name = ['^','<','V','>'] #Tên của các hành động trên
chi phí = 1

tìm kiếm chắc chắn():
#phần tử danh sách mở có kiểu [g,x,y]
đã đóng = [[0 cho hàng trong phạm vi(len(lưới[0]))] cho cột trong phạm vi(len(lưới))]

#Chúng tôi khởi tạo vị trí bắt đầu như đã chọn
đã đóng[init[0]][init[1]] = 1
# chúng tôi đã gán tọa độ và giá trị g
x = ban đầu[0]
y = init[1]
g=0
#danh sách mở của chúng tôi sẽ chứa giá trị ban đầu của chúng tôi
mở = [[g,x,y]]


đã tìm thấy = Sai #flag được đặt khi tìm kiếm hoàn tất
từ chức= Sai #Flag được đặt nếu chúng tôi không thể tìm thấy mở rộng

#print('danh sách mở ban đầu:')
#for i trong phạm vi(len(open)):
#print(' ', open[i])
#in('----')


trong khi tìm thấy là sai và từ chức là sai:
#Kiểm tra xem chúng tôi có còn phần tử nào trong danh sách mở không
if len(open)==0: #If danh sách mở của chúng tôi trống
từ chức=Đúng
in('Thất bại')
print('############## Tìm kiếm bị chấm dứt mà không thành công')
khác:
#nếu vẫn còn thành phần trong danh sách của chúng tôi
#xóa nút khỏi danh sách
open.sort()
open.reverse() #đảo ngược danh sách
tiếp theo = open.pop()
#print('danh sách mục')
#print('tiếp theo')

#Sau đó, chúng tôi gán ba giá trị cho x, y và g. Đó là phần mở rộng của chúng tôi.
x = tiếp theo[1]
y = tiếp theo[2]
g = tiếp theo[0]

#Kiểm tra xem chúng ta đã hoàn thành chưa

nếu x == mục tiêu [0] và y == mục tiêu [1]:
đã tìm thấy=Đúng
print(next) #Ba phần tử trên if
print('##############Tìm kiếm thành công')
khác:
#mở rộng phần tử chiến thắng và thêm vào danh sách mở mới
cho tôi trong phạm vi(len(delta)):
x2 = x+delta[i][0]
y2 = y+delta[i][1]
#if x2 và y2 rơi vào lưới
nếu x2 >= 0 và x2 < len(grid) và y2 >=0 và y2 <= len(grid[0])-1:
#if x2 và y2 chưa được kiểm tra và không có trở ngại
nếu đóng [x2] [y2] == 0 và lưới [x2] [y2] == 0:
g2 = g+chi phí #chúng tôi tăng cos
open.append([g2,x2,y2])#chúng tôi thêm chúng vào danh sách mở của chúng tôi
#print('nối thêm mục danh sách')
#print([g2,x2,y2])
#Sau đó, chúng tôi kiểm tra chúng để không bao giờ mở rộng nữa
đã đóng[x2][y2] = 1

tìm kiếm()

câu trả lời hay nhất

anh ấy đặt tọa độ là 0 và 1 trong dòng này close[init[0]][init[1]] = 1

đã đóng[init[0]][init[1]] không có nghĩa là "đặt giá trị tại tọa độ (0,1) thành 1". Có nghĩa là “sử dụng ban đầu[0] Là tọa độ x, sử dụng ban đầu[1] Là tọa độ y, đặt giá trị thành 1". ban đầu[0]là 0,ban đầu[1]là 0, vậyđã đóng[init[0]][init[1]] = 1 Sẽ đã đóng[0][0] Đặt thành 1.

Giả sử tọa độ ban đầu là ban đầu = [2,5]. Thay đổi dòng này thành đã đóng[init[2]][init[5]] = 1 là không chính xác. Điều này sẽ gặp sự cố với IndexError vì khởi tạo Chỉ có hai phần tử, vì vậy bạn chỉ có thể lập chỉ mục cho nó bằng 0 hoặc 1.

Về python - tại sao mã này lại đóng[init[0]][init[1]] thay vì close[init[0]][init[0]]? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/56808670/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress