首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组排列成所有可能的对

将数组排列成所有可能的对
EN

Stack Overflow用户
提问于 2017-01-29 17:50:54
回答 1查看 67关注 0票数 1

我正在研究一个问题(用C语言),它要求我列出偶数点之间的所有可能的连接,这样每个点都只能连接到另一个点。例如,假设我有点1、2、3和4:

  • 1-2,3-4
  • 1-3,2-4
  • 1-4,2-3

点的顺序不重要(1-2和2-1相同),连接的顺序也不重要(1-2,3-4和3-4,1-2)。

目前,我正试图简单地将数组(如{1, 2, 3, 4} )排序到所有可能的顺序中,并检查是否已经生成它。然而,这可能是非常昂贵的,也需要忽略点和对的排序。

怎样才能更好地将数组排列成所有可能的对?算法的基本轮廓将不胜感激!

编辑:在上面使用{1, 2, 3, 4}的示例中,如果将配对表示为数组中的两个相邻元素,则所有可能的结果将是:

  • {1, 2, 3, 4}:1-2,3-4
  • {1, 3, 2, 4}:1-3,2-4
  • {1, 4, 2, 3}:1-4,2-3

我需要整个排列好的数组来执行基于所有连接的计算。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-29 17:56:13

这可以通过不确定地配对最右边的未配对元素和递归来实现。在C中:

代码语言:javascript
运行
复制
void enum_matchings(int n, int a[static n]) {
    if (n < 2) {
        // do something with the matching
        return;
    }
    for (int i = 0; i < n-1; i++) {
        int t = a[i];
        a[i] = a[n-2];
        a[n-2] = t;
        enum_matchings(n-2, a);
        a[n-2] = a[i];
        a[i] = t;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41924049

复制
相关文章

相似问题

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