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