python 实现单链表和走迷宫
2018年11月28日 08:47
1.Python实现单链表
"""
编写一个node的类实现,单链表
首节点值为none
"""
class ListNode:
def __init__(self, x,node = None):
self.data = x
self.next = node
class LinkList:
def __init__(self):
self.head = 0
def initlist(self,data):
self.head = ListNode(data[0])
p = self.head
for i in data[1:]:
node = ListNode(i)
p.next = node
p = p.next
def length(self):
p = self.head
len = 0
while p :
len += 1
p = p.next
return len
def is_empty(self):
if self.length() == 0:
return True
else:
return False
def clear(self):
self.head = 0
def append(self,val):
q = ListNode(val)
if self.head == 0:
self.head = q
else:
p = self.head
while p.next:
p = p.next
p.next = q
def insert(self,index,item):
if self.is_empty() or index < 0 or index > self.length():
print('LinkList index error')
return
if index == 0:
q = Node(item,self.head)
self.head = q
p = self.head
post = self.head
j = 0
while p.next !=0 and j < index:
post = p
p = p.next
j += 1
if index == j:
q = ListNode(item,p)
post.next = q
def deleter(self,index):
if self.is_empty() or index <0 or index >self.length():
print('LinkList index error.')
return
if index == 0:
q = self.head
self.head = q.next
p = self.head
post = self.head
j = 0
while p.next != 0 and j
post = p
p = p.next
j += 1
if index == j:
post.next = p.next
def index(self,value):
if self.is_empty():
print("LinkList is empty.")
return
p = self.head
i = 0
while p.next!= 0 and not p.data == value:
p = p.next
i += 1
if p.data ==value:
return i
else:
print('Not found!')
return -1
def get(self,index):
if self.is_empty() or index <0 or index >self.length():
print('LinkList index error.')
return
p = self.head
j = 0
while p.next != 0 and j
p = p.next
j += 1
if j == index:
return p.data
else:
print("Target is not exist.")
return None
def __getitem__(self, key):
if self.is_empty():
print('linklist is empty.')
return
elif key <0 or key > self.length():
print('the given key is error')
return
else:
return self.get(key)
def __setitem__(self, key, value):
if self.is_empty():
print('linklist is empty.')
return
elif key <0 or key > self.length():
print('the given key is error')
return
else:
self.delete(key)
return self.insert(key)
l = LinkList()
l.initlist([1,2,3])
print(l.get(2))
l.append(4)
print(l.get(3))
l.insert(2,50)
print(l.get(2))
l.deleter(2)
print(l.get(2))
print(l.index(3))
print(l[2])
2.Python解决走迷宫问题
"""
说明:0表示通道,1表示墙
从指定的初始点移动到目标地点,输出移动的坐标轨迹,
x 向下,y向上,如果没有出口,放回None
这个是基于栈的,先进后出,深度优先,路径有定义的方向决定
基于队列的好像比较难实现,广度优先,这个是输出最短路径
"""
li = [
[1,1,1,1,1,1,1,1,1],
[1,0,1,1,0,0,0,1,1],
[1,0,1,1,0,0,0,1,1],
[1,0,0,0,0,1,1,1,1],
[1,0,1,1,1,0,0,0,1],
[1,0,0,0,0,0,1,0,1],
[1,1,0,0,1,1,1,1,1],
[1,1,1,0,0,0,1,0,1],
[1,1,1,1,1,1,1,1,1]
]
#(x-1,y),(x,y+1),(x+1,y),(x,y-1)
def coord(point):
x,y = point
temp = [(x-1,y),(x,y+1),(x+1,y),(x,y-1)]
return temp
def maze(li,start_point,end_point):
curr_point = start_point
path_stack = [curr_point]
while path_stack:
flag = False
for next_point in coord(curr_point):
if li[next_point[0]][next_point[1]] == 0:
flag = True
li[curr_point[0]][curr_point[1]] = 2
curr_point = next_point
path_stack.append(curr_point)
if curr_point == end_point:
print('其中一个出口为:')
print(path_stack)
return
break
if not flag:
pa = path_stack.pop()
li[pa[0]][pa[1]] = 2
try:
curr_point = path_stack[-1]
except Exception as e:
print('对不起,没有出口')
return
if __name__ == '__main__':
maze(li,(1,1),(7,7))
作者: ming.zhong
阅读: 1167
评论: 1
点赞
收藏
关注
本文版权归作者和此站共有,欢迎转载,但未经作者同意必须声明引用出处,且在文章页面明显位置给出原文连接。
评论
Nickname
Comment
Submit
Cancel
ming.zhong(2018-12-06 18:48:54)#1楼
超级厉害的!!回复