class Village:
def __init__(self, owner=None):
self.owner = owner
self.next = None
class Pioneer:
def __init__(self, position):
self.position = None
def main():
k, n = map(int, input().split())
pioneers = [Pioneer(i) for i in range(k)]
starting_village = Village()
current_village = starting_village
villages = [starting_village]
for i in range(n):
pioneer, action = map(str, input().split())
if action == "move":
if current_village.next is not None:
current_village = current_village.next
pioneers[int(pioneer)].position = current_village
elif action == "build":
new_village = Village(owner=pioneer)
if current_village.next is not None:
new_village.next = current_village.next
current_village.next = new_village
pioneers[int(pioneer)].position = new_village
villages.append(new_village)
m = len(villages) - 1
print(m)
current_village = starting_village.next
while current_village is not None:
print(current_village.owner)
current_village = current_village.next
if __name__ == "__main__":
main()
在链接列表上,我不知道为什么我的代码不能按照我的想法工作。 如果我
2 4
0 build
1 build
1 move
1 build
如果是我想的那样 起源 -> 村庄 2(先锋 1 拥有) -> 村庄 1(先锋 0 拥有)-> 村庄 3(先锋 1 拥有) 所以我想这会是
3 1 0 1
但是
3 1 1 0
即将推出。
有什么问题吗?
如果action == "build",如果当前村庄中有下一个村庄,先锋可以在现在的村庄和下一个村庄之间创建一个新的村庄。 如果旁边没有村庄,先锋可以在当前村庄旁边建造一个村庄。
当先锋建立村庄时,先锋将先锋的位置移动到新村庄。
先锋移动时,如果当前村庄有下一个村庄,则先锋可以移动到下一个村庄。 如果没有下一个村庄,先锋就会留在现在的地方。
您应该通过保留对旧下一个村庄的引用来正确插入新村庄,然后更新新村庄的
next
属性。检查如何修改您的 build
操作:
elif action == "build":
new_village = Village(owner=pioneer)
old_next = current_village.next
current_village.next = new_village
new_village.next = old_next
pioneers[int(pioneer)].position = new_village
villages.append(new_village)