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