没有白走的路,每一步都算数🎈🎈🎈
已知一个方格,有n行m列,这个方格中的每个位置都标满了数字,问是否可以把这个方格分成两个部分,这两个部分的所有数字之和是相同的。如果可以并且有多种方案,则输出左上角的部分,经过的方格数最小的方法。否则输出0。
第一行:
n,m表示行数和列数
第二行:
输入n行m列的所有数据,每个数据用空格分开
输出最小方案数
样例输入:
3 3
10 1 52
20 30
1 1 2 3
样例输出:
3
import os
import sys
ans = 0
m,n = map(int,input().split())
mp = [[int(j)for j in input().split()]for i in range(n)]
flag = [[0]*(m)for i in range(n)]
for i in range(n):
for j in range(m):
ans+=mp[i][j]
z = []
d = [[1,0],[-1,0],[0,1],[0,-1]]
def dfs(x,y,res,cnt):
if res == ans//2:
z.append(cnt)
return
for a,b in d:
newx,newy = x+a,y+b
if newx>=0 and newx<n and newy>=0 and newy<m \
and flag[newx][newy]==0:
cnt+=1
res+=mp[newx][newy]
flag[x][y] = 1
dfs(newx,newy,res,cnt)
res-=mp[newx][newy]
flag[x][y] = 0
cnt-=1
if ans%2 !=0:
print(0)
else:
dfs(0,0,mp[0][0],1)
print(min(z))