//分支限界法
#include#include#include#include
const int INF = 100000;const int MAX_N = 22;using namespacestd;//n*n的一个矩阵
intn;int cost[MAX_N][MAX_N];//最少3个点,最多MAX_N个点
structNode
{bool visited[MAX_N];//标记哪些点走了
int s;//第一个点
int s_p;//第一个点的邻接点
int e;//最后一个点
int e_p;//最后一个点的邻接点
int k;//走过的点数
int sumv;//经过路径的距离
int lb;//目标函数的值(目标结果)
bool operator
}
};
priority_queue pq;//创建一个优先队列
int low, up;//下界和上界
bool dfs_visited[MAX_N];//在dfs过程中搜索过//确定上界,利用dfs(属于贪心算法),贪心法的结果是一个大于实际值的估测结果
int dfs(int u, int k, int l)//当前节点,目标节点,已经消耗的路径
{if (k == n) return l + cost[u][1];//如果已经检查了n个节点,则直接返回路径消耗+第n个节点回归起点的消耗
int minlen =INF, p;for (int i = 1; i <= n; i++)
{if (!dfs_visited[i] && minlen > cos