zoukankan      html  css  js  c++  java
  • 全排列的编码与解码

    看《算法竞赛入门经典》 第七章, 隐式图的遍历,八数码一题。

    学到了全排列的编码与解码

    用处: 每一个排列代表一个图的状态, 比如 8,3,2,4,5,6,7,0,1

    表示成图就是

    8  3  2

    4  5  6

    7  0  1

    我们将0~8的全排列和0~9!一一映射起来

    比如0, 1, 2, 3, 4, 5, 6, 7, 8 对应的就是0, 因为是第一个排列组合

    那么8 7 6 5 4 3 2 1 0 对应的就是9!,因为是最后一种排列组合。

    算法实现如下:

    int fact[9];   //假设排列组合范围是0~8
      
    void init(){
      fact[0] = 1;   for (int i = 1; i < 9; i++) fact[i] = fact[i - 1] * i; } int transfer(int ar[9]) { int code = 0; for (int i = 0; i < 9; i++) { int cnt = 0; for (int j = i + 1; j < 9; j++) if (ar[j] < ar[i]) cnt++; code += fact[8 - i] * cnt; } return code; }
  • 相关阅读:
    lists 函数整理
    orddict 练习
    github 的使用
    wxListCtrl 例子 二
    Erlang eunit
    Erlang 中 Tuple 使用 以及 List 模块意外
    Erlang Json
    模块和包
    Mysql作为zabbix数据库ibdata1文件太高解决
    用户管理和数据库安全
  • 原文地址:https://www.cnblogs.com/Bowen-/p/4944893.html
Copyright © 2011-2022 走看看