解题思路:
利用bfs的思想,不断的向外扩展邻接节点,如果某一步扩展不到新的邻接节点,则停止循环,最后得到所有节点的数量即可。
具体代码如下:
# -*- coding:utf-8 -*-
class Solution:
def movingCount(self, threshold, rows, cols):
# write code here
#bfs思想
if threshold < 0:
return 0
data = []
for r in range(rows):
tmp = []
for c in range(cols):
count = 0
for char in str(r):
count += int(char)
for char in str(c):
count += int(char)
if count > threshold:
tmp.append(False)
else:
tmp.append(True)
data.append(tmp)
node_set = [[0,0]]
linked_node = []
#找到所有邻接点,如果所有邻接点中有新的点,则继续,否则说明该终止循环了
flag = True
while flag:
flag = False
linked_node = []
for ptr in node_set:
if ptr[0] == 0 and rows!= 1 and data[ptr[0]+1][ptr[1]]:
linked_node.append([ptr[0]+1, ptr[1]])
elif ptr[0] == rows-1 and rows!=1 and data[ptr[0]-1][ptr[1]]:
linked_node.append([ptr[0]-1, ptr[1]])
else:
if rows!= 1 and data[ptr[0]+1][ptr[1]]:
linked_node.append([ptr[0]+1, ptr[1]])
if rows!= 1 and data[ptr[0]-1][ptr[1]]:
linked_node.append([ptr[0]-1, ptr[1]])
if ptr[1] == 0 and cols!=1 and data[ptr[0]][ptr[1]+1]:
linked_node.append([ptr[0], ptr[1]+1])
elif ptr[1] == cols-1 and cols!=1 and data[ptr[0]][ptr[1]-1]:
linked_node.append([ptr[0], ptr[1]-1])
else:
if cols!=1 and data[ptr[0]][ptr[1]+1]:
linked_node.append([ptr[0], ptr[1]+1])
if cols!=1 and data[ptr[0]][ptr[1]-1]:
linked_node.append([ptr[0], ptr[1]-1])
for node in linked_node:
if node not in node_set:
flag = True
node_set.append(node)
return len(node_set)