Algorithm 图算法:类似于TSP

Algorithm 图算法:类似于TSP,algorithm,Algorithm,我想解决一个类似于TSP(旅行推销员问题)的问题 我有N个(N>0,N路径大小) { //如果访问了其他节点,请再次添加此节点 //所以我们可以移动到下一个未访问的子树 路径。添加(u); path size=path.Count; } } } 从1:1>2>1>3>4>3>1开始 从2:2>1>3>4>3>1>2开始 您还可以更新算法,使其在访问最后一个节点时结束。这是否与Wolfram Research的商业软件产品Mathematica有关?如果不是的话,我们应该把它移到另一个堆栈

我想解决一个类似于TSP(旅行推销员问题)的问题

我有N个(N>0,N<20)节点,我必须访问所有节点

节点之间的成本是相等的

我可以无限次访问一个节点

我想找到一个以上的路径和成本没有限制


告诉我一些关于这个问题的有效算法?

为什么不简单地运行DFS<代码>O(V+E)

通过从不同的根启动算法,可以获得多条路径

bool[] visited;
List<int> path;
void Visit(int u)
{
    if (visited[u]) return; // only visit each node once
    visited[u] = true;
    path.Add(u); // add initially to path
    int pathSize = path.Count;
    foreach(int v in nbs[u]) {
        Visit(v);
        if(path.Count > pathSize)
        {
            // if another node was visited, add this node again
            // so we can move to the next unvisited subtree
            path.Add(u);
            pathSize = path.Count;
        }
    }
}
bool[]访问;
列表路径;
无效访问(国际大学)
{
if(visted[u])return;//只访问每个节点一次
访问[u]=真;
path.Add(u);//最初添加到path
int path size=path.Count;
foreach(单位:nbs[u]){
访问(五);
如果(path.Count>路径大小)
{
//如果访问了其他节点,请再次添加此节点
//所以我们可以移动到下一个未访问的子树
路径。添加(u);
path size=path.Count;
}
}
}
  • 从1:1>2>1>3>4>3>1开始
  • 从2:2>1>3>4>3>1>2开始


您还可以更新算法,使其在访问最后一个节点时结束。

这是否与Wolfram Research的商业软件产品Mathematica有关?如果不是的话,我们应该把它移到另一个堆栈交换章节。只是做一个随机漫步:我不确定我是否理解这个问题。这个图是完全图吗?是的,完全图问题。但它有一个条件,即每个节点的访问次数不受限制。如果您能提供很少的输入数据集就好了