洛谷P1086——花生采摘,Python二维数组坐标处理方法

题目链接:

洛谷P1086

很明显采用二维矩阵,但是Python没有提供直接的二维矩阵,二维列表寻找最大值的坐标时,又不太方便,所以选择展开成一维。

大家如果有其他解决办法,也欢迎提出呀

peanut = []
m, n, k = input().split()  # 输入第一行三个数,赋值
m = int(m)  # 赋值后为str->int
n = int(n)
k = int(k)  

for i in range(m):
	line = input().split()    
	lin = [int(x) for x in line]  # 将每一行输入转化成int列表
	for j in lin:
		peanut.append(j)  # 不做二位列表,直接排成一维

num_step = 0  # 轮数
reap = 0  # 采摘量
while True:
	num_step += 1  
	indx = peanut.index(max(peanut))  # 找到最大值
	l = indx // n   # 最大值纵横坐标
	c = indx % n 
	if num_step == 1 :   # 当第一次时,单独处理,站在最大值上面的路边
		now = [-1, c]  
	steps = abs(l-now[0]) + abs(c-now[1]) + 1  # 计算当前位置和最大值的差(注意绝对值),并加一(采摘)
	if (k-steps) >= l+1:  # 预计一下,走完这一轮能否回到路边,能回到的话:
		k -= steps
		now = [l, c]
		reap += peanut[l*n +c]   # 采摘
		peanut[l*n + c] = 0   # 改点采摘完为0
	else :             # 不能回到路边,结束
		break

print(reap)



发布了52 篇原创文章 · 获赞 21 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/zhr1030635594/article/details/100120621