1

以下代码尝试创建一个地图,显示从该地图上的每个方格到指定位置所需的最少移动次数。整个功能在很大程度上与问题无关,但我认为我应该在上下文中提供我的问题。我还从集合中导入了双端队列。奇怪的部分出现在第 7 行。我得到 TypeError: 'int' object not iterable。但是语句“distance_from_loc,f_loc = squares_to_check.popleft()”不应该试图迭代任何东西,以达到最佳知识。任何帮助将不胜感激。

    def complex_distance(self, loc):
        row, col = loc
        squares_to_check = deque((0, loc))
        self.complex_distance_map = zeros((self.height, self.width), int) + 999
        self.complex_distance_map[row][col] = 0
        while squares_to_check:
            distance_from_loc, f_loc = squares_to_check.popleft()
            distance_from_loc += 1
            for d in AIM:
                n_loc = self.destination(f_loc, d)
                n_row, n_col = n_loc
                if distance_from_loc < self.complex_distance_map[n_row][n_col] and not self.map[n_row][n_col] == -4:
                    squares_to_check.append((distance_from_loc, n_loc))
                    self.complex_distance_map[n_row][n_col] = distance_from_loc
4

1 回答 1

7

该行确实尝试迭代:

>>> a, b = 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

线

squares_to_check = deque((0, loc))

用两个元素初始化双端队列,0loc不是用单个元素(0, loc)。利用

squares_to_check = deque([(0, loc)])

得到想要的结果。

于 2011-04-20T10:51:48.603 回答