class Player:
    def num(self,Array): #传入一个二维数组,判断内部的1是否和边界相连
        self.directions=[[-1,0],[0,-1],[1,0],[0,1]] #左 上 右 下
        m=len(Array) #高度 行
        n=len(Array[0]) #宽度 列
        result=0 #返回结果
        for i in range(0,n): #列号
            if(Array[0][i]==1): #第一行 如果最上排有1的情况
                Array[0][i]=0 #改为0
                self.dfs(0,i,Array,m,n)
            if(Array[m-1][i]==1): #最后一行 
                Array[m-1][i]=0
                self.dfs(m-1,i,Array,m,n)        
        for j in range(1,m-1): #行号(第一行已判断)
            if(Array[j][0]==1): #左边第一列每个值
                Array[j][0]=0
                self.dfs(j,0,Array,m,n)
            if(Array[j][n-1]==1): #最右边列值
                Array[j][n-1]=0
                self.dfs(j,n-1,Array,m,n)
        for array in Array:
            result+=array.count(1) #统计剩余1的个数,即为不能到达边界的个数
        return result
    def dfs(self,i,j,Array,m,n):
        for k in self.directions:
            x0=i+k[0]
            y0=j+k[1]
            if 0<=x0<m and 0<=y0<n and Array[x0][y0]==1:
                Array[x0][y0]=0 #相邻的1设置为0
                self.dfs(x0,y0,Array,m,n)

test=[[0,1,0,1],
      [1,0,1,1],
      [0,1,0,0],
      [0,0,0,1]]
test2=[[0,0,0,1],
       [0,0,1,1],
       [0,0,1,1],
       [0,0,0,1]]
player=Player()
print(player.num(test))
print(player.num(test2))