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