class Pattern:
def nums(self,grid): #传递一个二位数组参数,判断其图像个数
self.length=len(grid) #长度,纵坐标
if self.length==0:
return 0 #参数为空值 返回0值
self.width=len(grid[0]) #横坐标,每个子元素的元素个数
self.directions=[[-1,0],[0,-1],[1,0],[0,1]] #左 上 右 下
self.marked=[[0 for _ in range(self.width)] for _ in range(self.length)] #访问标记
result=0 #最终计算出的图案个数
for i in range(self.length):
for j in range(self.width): #遍历图案,寻找每个1来判断
if self.marked[i][j]==0 and grid[i][j]=='1': #未被访问且为1
result+=1 #结果加1
self.dfs(grid,i,j) #以此点做dfs遍历
return result
def dfs(self,grid,i,j):
self.marked[i][j]=1 #将此点设置为已访问
for x in range(4): #上下左右四次判断 0~3 每个点上下左右判断四次
x0=i+self.directions[x][0] #更新横坐标
y0=j+self.directions[x][1] #更新纵坐标
if 0<=x0<self.length and 0<=y0<self.width and self.marked[x0][y0]==0 and grid[x0][y0]=='1': #位置未超出范围且未访问且位置元素为'1'
self.dfs(grid,x0,y0) #再以此点做dfs
test=[['1','1','0','0','0'],
['1','0','0','0','0'],
['1','0','0','0','0'],
['0','0','0','1','1']]
test2=[['1','1','0','0','0'],
['1','0','0','0','0'],
['1','0','0','0','0'],
['1','1','0','0','0']]
haha=Pattern()
print(haha.nums(test))
print(haha.nums(test2))