八皇后之贪心算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主函数代码
• if __name__ == '__main__': • i=0 • while( not queen()): • i=i+1 • print("第"+str(i)+"次循环未果的mylist:",mylist) • mylist = [-1,-1,-1,-1,-1,-1,-1,-1] • print("经过"+str(i+1)+"次循环,终于找到解辣")
八皇后之贪心算法
组员:张雨欣 张东梅 崔丽平 何颖
目录
• • • • 贪心来源选择 最优位置 贪心的优缺点 代码演示
贪心选择
在选择最优的皇后位置时, 总是选择在该位置确定后, 接下来可以放满足条件的 皇后的最大的个数。
贪心选择代码
• def num_space(row,col): • count = 0 • for i in range(0,8): • for j in range(0,8): • if not conflict(i,j): • count = count+1 • return count
最优位置代码
• 接上面代码 • # 再找这其中position一样大的位置,随机返回一个位置 • for i in range(0, 8): • if mylist[i] == -1: • for j in range(0, 8): • if not conflict(i,j): • mylist[i] = j • if temp == num_space(i,j): • positionslist.append([i,j]) • mylist[i] = -1 • if not positionslist: • positionslist.append([-1,-1]) • return positionslist[random.randint(0,len(positionslist)-1)]
代码演示
最优位置
• • • • 每一次寻找最优位置时: (1)将所有位置进行遍历,并记录下该位置下接下来可放的 位置个数。 (2)将可放位置个数最大的位置记录下来。 (3)将其他位置可放个数与最大的位置个数存到列表中。 (4)最优位置则是在该列表中随机返回一个。
ቤተ መጻሕፍቲ ባይዱ优位置代码
• # 定义当前行可以选择的最优位置 • def best_positon(): • temp=0 • positionslist=[] • #将当前行八个位置进行判断,先检查是否冲突,再计算该位置确 定后的剩下行可放的空格数
贪心的优缺点
• 优点:能够明显缩短找到解的时间 • 缺点:由于贪心算法是一个局部最优的算法,有时候不一 定能求得解。 • 解决方法:这时候需要考虑另起一个山头使其能求得解。 在queen函数中,如果能找到解则返回True,如果不能找到 解则返回False。在主函数中,每次循环queen函数,直到 能找到解为止。
• • • • • • • • • # 记录下使num_space最大的positon for i in range(0,8): if mylist[i]==-1: for j in range(0,8): if not conflict(i,j): mylist[i]=j if temp<num_space(i,j) : temp=num_space(i,j) mylist[i] = -1
queen函数代码
• def queen(): • for i in range(0, 8): • temp = best_positon() • if temp[0]==-1 : • #抱歉,找不到解! • break • if conflict(temp[0], temp[1]): • mylist[temp[0]]=temp[1] • if -1 not in mylist: • #找到解啦 • print("最终的解是myList=", mylist) • return True • else: • #抱歉,找不到解! • return False
相关文档
最新文档