Giải 8 câu đố


12

Câu đố 8 là biến thể nhỏ hơn của 15Puheads (hay Câu đố trượt ). Bạn có một 3x3lưới chứa đầy các số từ 0-8 (0 biểu thị ô trống) được sắp xếp theo thứ tự ngẫu nhiên. Nhiệm vụ của bạn là nhập lưới 3x3 và hiển thị giải pháp ngắn nhất (di chuyển tối thiểu) để đến trạng thái mục tiêu. Hiển thị mỗi boardstate bao gồm trạng thái đầu tiên trong đầu ra.

Có thể có nhiều giải pháp tối ưu, bạn chỉ cần in một.

Đầu vào: (ví dụ nhỏ)

1 2 0
4 5 3
7 8 6

Đầu ra:

2 <- denotes minimum number of moves required
1 2 0
4 5 3
7 8 6

1 2 3
4 5 0
7 8 6

1 2 3
4 5 6
7 8 0 <- goal state

Nếu câu đố không thể được giải, hãy in ra -1(biểu thị không thể giải được)

Chỉnh sửa : Giới hạn thời gian: <30 giây.


Đối với những người không quen thuộc với npuheads, vui lòng đọc liên kết được cung cấp ...
st0le

trong câu hỏi của bạn, không grid which is filled with numbers from 0-9nên grid which is filled with numbers from 0-8?
Clyde Lobo

@Clyde, Rất tiếc! :) Đã sửa.
st0le

Khá chắc chắn rằng nó luôn luôn có thể giải quyết, phải không?
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Nếu bạn đến trạng thái ban đầu từ trạng thái Mục tiêu bằng cách sử dụng quy tắc trượt, nó luôn có thể giải quyết được. Nếu bạn tùy ý đặt gạch thì có những trạng thái không thể giải quyết được. Google cho khả năng giải quyết cho n câu đố
st0le

Câu trả lời:


4

Con trăn, 418 ký tự

Mã liệt kê một cách thấu đáo tất cả các vị trí và tạo ra các bản đồ về độ sâu của chúng (D) và một vị trí gần hơn để giải quyết (E). Sau đó, nó tìm kiếm trạng thái mục tiêu để có được đầu ra.

D={(1,2,3,4,5,6,7,8,0):0}
E=D.copy()
def Z(a,d):
 b=list(a);b[i],b[i+d]=b[i+d],0;b=tuple(b)
 if b not in E:E[b]=a;D[b]=D[a]+1
for x in' '*32:
 for a in E.copy():
  i=list(a).index(0)
  if i>2:Z(a,-3)
  if i%3:Z(a,-1)
  if i%3<2:Z(a,1)
  if i<6:Z(a,3)
g=[]
for x in' '*3:g+=map(int,raw_input().split())
g=tuple(g)
if g in E:
 print D[g]
 while g:
  for i in(0,3,6):print'%d %d %d'%g[i:i+3]
  g=E[g];print
else:print -1

như ' '*3 mánh khóe.
st0le
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.