如何使用Python检查数组中的所有邻居

时间:2016-02-01 19:50:09

标签: python python-2.7

因此,对于一个学校项目,我试图在Python 2.7中重新创建一个“Forest Fire Simulation”程序。 如果您对此不熟悉,则会对here

描述规则

我目前设置的代码用于生成一个10x10网格,其中包含60%Ts,30%Bs和10%Ws,分别代表树木,空白区域和火灾。我遇到的问题是找出如何使函数通过并检查单个地方的所有邻居,需要查看树是否接近火块以便将树更改为燃烧块在下一个“滴答声”。我看了一下,但找不到任何以我需要的方式做到这一点。

显然,我可以强制它,并为每个方块提供不同的功能,但这根本不实用,并且只有当网格保持相同的大小时它才会起作用。任何建议或帮助都会很棒,如果你有任何问题可以随意提出,抱歉模糊不清,因为我现在有点紧迫的时间问。非常感谢你!

1 个答案:

答案 0 :(得分:0)

显然我没有做这里的所有工作,但你可以设置一个字典,其中一个键代表数组的数字(11,12,13,21,22,23等),然后循环通过字典使用键来确定周围的邻居并相应地调整值。您可能需要2个相互镜像的词典,以便在您进行模拟时使所有更新正确流动。

这是我的基本前提:

import random
#a cell in the forest
class cell():
    def __init__(self):
        self.state = ''
#Creating the forest and populating randomly with value
forest = {}
i = 1
while i < 5:
    j = 1
    while j < 5:
        tcell = cell()
        rnum = random.randrange(1,3)
        if rnum == 1:
            tcell.state = 'T'
        elif rnum == 2:
            tcell.state = 'B'
        else:
            tcell.state = 'W'
        forest[str(i) + str(j)] = tcell
        j+=1
    i+=1
#iterating through forest and gathering values to adjust accordingly
for k,v in forest.iteritems():
    d1 = k[0]
    d2 = k[1]
    startstate = v.state
    NW = forest[str(int(d1)-1)+str(int(d2)+1)]
    N = forest[str(int(d1))+str(int(d2)+1)]
    NE = forest[str(int(d1)+1)+str(int(d2)+1)]
    W = forest[str(int(d1)-1)+str(int(d2))]
    E = forest[str(int(d1)+1)+str(int(d2))]
    SW = forest[str(int(d1)-1)+str(int(d2)-1)]
    S = forest[str(int(d1))+str(int(d2)-1)]
    SE = forest[str(int(d1)+1)+str(int(d2)-1)]
    if startstate == 'W':
        if NW.state == 'T':
            NW.state= "W"
        if N.state == 'T':
            N.state= "W"
        if NE.state == 'T':
            NE.state= "W"
        if W.state == 'T':
            W.state= "W"
        if E.state == 'T':
            E.state= "W"
        if SW.state == 'T':
            SW.state= "W"
        if S.state == 'T':
            S.state= "W"
        if SE.state == 'T':
            SE.state= "W"