算法设计与分析实验五-旅行商问题|实验六-n皇后问题
2022/1/8 17:03:58
本文主要是介绍算法设计与分析实验五-旅行商问题|实验六-n皇后问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
指路->旅行商问题
1问题
n皇后问题
2问题分析
可以将nn的棋盘看成一个nn的表格,放置皇后Q,且需要满足两个条件
条件1:同行同列不能放置两个或大于两个皇后
条件2:皇后的斜线上不能存在皇后
3问题建模
i,j表示行值,a[i],a[j]表示列值
|a[i]-a[j]| != |i-j|
3.算法描述
全排列算法的实现
使用递归和回溯
函数范围
0<i<len(皇后的个数)
i+1<j<len(皇后的个数)
函数逻辑
通过两层for循环实现,通过定义常量,并在语句块中自增,判断语句块是否被执行,实现对解空间的筛选
4算法源码
per_result = [] def per(lst,s,e): if s == e: per_result.append(list(lst)) else: for i in range(s,e): lst[i],lst[s] = lst[s],lst[i]#试探 per(lst,s+1,e)#递归 lst[i],lst[s] = lst[s],lst[i]#回溯 #剪枝函数 #args:[1,2,3,4] #return true or false def shear(lst): result = 0 for i in range(len(lst)): for j in range(i+1,len(lst)): if(abs(lst[j] - lst[i]) == abs(j-i)): result += 1 if(result > 0): return True else: return False #格式打印函数 def stamp(st): for i in st: for j in range(len(i)): a = ("."*(i[j]-1)+"#"+"."*(len(i)-i[j])) # print(a,"\t","第{}个皇后放在棋盘的第{}列".format(j+1,i[j])) print(a, "\t", "({},{})".format(j + 1, i[j])) print(" ")#负责空行 num = eval(input("请输入皇后的个数:")) lst = [i+1 for i in range(num)] per(lst,0,num) queen_lst = [] for i in per_result: if(shear(i) == False): queen_lst.append(i) stamp(queen_lst) print("共{:d}种可能".format(len(queen_lst)))
5测试数据
4
6程序运行结果
更多大学课业实验实训可关注公众号回复相关关键词
学艺不精,若有错误还望指点
这篇关于算法设计与分析实验五-旅行商问题|实验六-n皇后问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南