首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有可能的路径

所有可能的路径
EN

Stack Overflow用户
提问于 2014-01-02 17:45:54
回答 1查看 229关注 0票数 2

我目前正在为玩游戏点(链接)的人工智能工作。其目的是通过将颜色相似的点与一条线连接起来,以尽可能多地去除点。我已经翻过黑板,把每一组颜色相同的相邻点分组起来。这些组当前共享相同的高亮颜色(黑色)。例如,左上角的四个红色点形成一个单一的组,右上角的三个黄色点也是这样。

我需要计算每一个可能的路径通过这些团体之一。有人能想到一个好的算法吗?如何避免创建重复路径?

我听说在这种情况下稍微修改一下DFS会很好。但是,允许路径在节点处交叉,但不能重用边缘。如何相应地修改DFS?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-02 20:32:36

这里有一些伪代码可以让你开始。我可能会这么做。用边代替节点可以很好地解决交叉路径的问题,但提取边缘比节点更困难。您需要将边缘索引映射到节点索引。

您将获得每条路径两次,因为一条路径可以从两个方向遍历。如果点组变大,请考虑修剪最不有趣的路径。内存需求指数增长为4^n,其中n是组中的点数。我想不出在不允许重复的情况下添加不完全路径的好方法,但是您可能对提前结束的路径不感兴趣吗?

代码语言:javascript
复制
private LinkedList<Edge> recurse(LinkedList<Edge> path) {
    Edge last = path.getLast();
    Edge right = <get Edge to the right of last>;
    Edge bottom = <get Edge below last>;
    Edge left = <get Edge to the left of last>;
    Edge top = <get Edge above last>;
    if( right && !path.contains(right) ) {
        LinkedList<Edge> ps = path.clone();  // NOTE: check if the built-in clone() function does a shallow copy
        ps.addLast( right );
        paths.add( recurse(ps) );
    }
    if( bottom && !path.contains(bottom) ) {
        ...
    }
    if( left && !path.contains(left) ) {
        ...
    }
    if( top && !path.contains(top) ) {
        ...
    }
    return path;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20888629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档