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))