最少次数切水果问题
问题描述
小明在玩切水果游戏,已知屏幕上有若干水果,只允许用直线切水果,一次只允许划出一条直线,直线上的水果都会被消除掉;请求出小明最少需要切多少次才能把屏幕上的水果都切掉。已知屏幕由40X50的小方格组成,经过每个方格划出的直线最多只有4条,如下图所示经过红色方格(标注为8)能划出直线最多为4条,其中相同数字的方格属于同一直线(0为空);屏幕左上角坐标为(0,0),右下角坐标为(39,49)。
![AI AI](https://project1002.oss-cn-beijing.aliyuncs.com/%E6%96%87%E7%8C%AE%E9%98%85%E8%AF%BB/AI.png?x-oss-process=image/resize,w_1400/format,webp)
输入描述
第一行输入整数N(0 0:
self.update_list(self.fruit_remain)
self.sort_openList()
Temp_node = self.openList.pop(0) # 取出第一个节点
for temp_position in Temp_node.fruit_position:
self.fruit_remain.remove(temp_position) # 对该直线下水果进行删除
self.closeList.append(Temp_node) # 放入close列表中
if len(self.openList) > 0:
for node in self.openList:
# 设置父节点
node.set_parent(Temp_node)
'''
从文件中读取水果数量和坐标
'''
def read_data(filename):
f = open(filename + ".csv", 'r')
reader = csv.reader(f)
rows = [row for row in reader]
data = [list(map(int, row)) for row in rows]
n = data.pop(0)[0] # 提取水果数量总数
pos = copy.deepcopy(data) # 水果位置list合集
f.close()
return [n, pos]
# 获取当前环境版本
print("当前环境python版本为" + platform.python_version())
File = "./fruit5" # 默认读取的水果文件
Fnum = 0 # 水果数量初始化
F = [] # 水果位置合集
L = [] # 有水果的直线集合
rowth = 40
colth = 50
if (input("请选择数据输入方式:默认回车为从文件读取,任意输入非空字符后回车进入手动输入模式") == ""):
[Fnum, F] = read_data(File)
else:
Fnum = int(input('请输入整数水果数量N(0 |