#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int G[10][10];
int bestp;
int bestx[10];
int n;
//层数
struct Node
{
int weight;
int level;
int x[10];
Node()
{
memset(x, 0, sizeof(x));
}
Node(int _weight, int _level)
{
weight = _weight;
level = _level;
}
};
void Tra_bfs()
{
Node newnode, livenode;
newnode = Node(0, 2);
priority_queue<Node> q;
// priority_queue
for (int i = 1; i <= n; i++)
{
newnode.x[i] = i;
}
q.push(newnode);
while (!q.empty())
{
livenode = q.top();
int t = livenode.level;
if (t == n)
{
// 其实是倒数第二个节点
if (livenode.weight + G[livenode.x[n - 1]][livenode.x[n]] + G[livenode.x[n]][1] < bestp)
{
bestp = livenode.weight + G[livenode.x[n - 1]][livenode.x[n]] + G[livenode.x[n]][1];
}
continue;
}
if (livenode.weight > bestp)
continue;
for (int j = t; j <= n; j++)
{
// 还要有一个判断有无连接
int w = livenode.weight + G[livenode.x[t - 1]][livenode.x[j]];
// 注意这里是 t-1 并不是 t
Node lnode;
lnode = Node(w, t + 1);
for (int k = 1; k <= n; k++)
{
lnode.x[k] = livenode.x[k];
}
swap(lnode.x[t], lnode.x[j]);
if (w < bestp)
{
q.push(lnode);
}
}
}
}
void __init(){
// 初始化函数
}
int main()
{
// Node 的level 指的是节点和选择拓展路径是有区别的
}
主要就是正确理解解空间的拓展即可。
参考文档:
《趣学算法》