【找数字】
给一个二维数组nums,对于每一个元素num[i],找出距离最近的且值相等的元素,输出横纵坐标差值的绝对值之和,如果没有等值元素,则输出 -1。
输入描述
输入第一行为二维数组的行
输入第二行为二维数组的列
输入的数字以空格隔开。
输出描述
数组形式返回所有坐标值。
解题:
1.先遍历将相同数字的坐标放在一块
2,再次遍历,求出最小坐标和
rows = int(input())
cols = int(input())
d = {}
ret = []
l = []
for i in range(rows):
s = list(map(int,input().split()))
l.append(s)
for j in range(cols):
if s[j] not in d:
d[s[j]] = [(i,j)]
else:
a = d[s[j]]
a.append((i, j))
d[s[j]] = a
#{0: [(0, 0)], 3: [(0, 1), (1, 4)], 5: [(0, 2), (1, 1), (2, 1)], 4: [(0, 3), (2, 2), (2, 4)], 2: [(0, 4), (1, 0), (2, 0), (2, 3)], 7: [(1, 2)], 8: [(1, 3)]}
print(d)
for i in range(rows):
for j in range(cols):
k = l[i][j]
mds = None
for ii,jj in d[k]:
# 代表不是元素本身
if i != ii or j != jj:
ds = abs(ii - i) + abs(jj-j)
if mds is None:
mds = ds
else:
mds = min(mds,ds)
l[i][j] = -1 if mds is None else mds
print(l)