惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - EpicBlue

图元:四棱锥\立方体\扇形\带孔圆盘\圆柱体\球体 - EpicBlue - 博客园 绘制图元:线段、三角形、四边形 PyOpenGL 初始化框架 PaddleDetection的CPU训练 数独计算(C#) android TCP 客户端(仅接收数据) 管理自己的电子书(2) 管理自己的电子书 状态机参考 状态机 附 (一)nDoc相关资源 nDoc分析 (二) BaseDocumenter nDoc分析 (一) 可怜的nDoc 求助, Acess + winform无法Update的问题 查询面板(三) 查询面板(二) 查询面板(一) 接触ADO.Net 数据库查询 一个不成熟的程序员
排列组合的递归实现
EpicBlue · 2007-12-22 · via 博客园 - EpicBlue

代码片断
1 全排列历遍(递归法)
使用方法

Combination(0,5,outputdata);// alldata[0]需要初始化成全排列所包括的元素,alldata[1]到alldata[5]是递归时的临时数据,无需处理。

代码

int alldata[6][6];
int outputdata[6];
void Combination(int level,int datalen,int *output)
{
  
if(datalen >1)
  
{
    
for(int j=0;j<datalen;j++)
    
{
      
int n=0;
      
for(int k=0;k<datalen;k++)
      
{
        
if(k!=j)
        
{
          alldata[level
+1][n] = alldata[level][k];
          n
++;
        }

      }

      output[
0= alldata[level][j];
      Combination(level
+1,datalen-1,output + 1);
    }

  }
else
  
{
    output[
0= alldata[level][0];
    
// 一次排列完成,插入处理函数
  }

}

2 组合历遍(递归法)
C++版本
使用

//inputdata需要初始化为组合所包括的元素,调用时需要指明所有元素个数(对于函数来说是可选的元素个数),单个组合包含的元素个数(对于函数来说是单次排列缺少的元素个数)
Permutation(inputdata,
6,outputdata,3);

代码

void Permutation(int *data, int datalen, int * output, int num)
{
  
for(int i=0;i<datalen-num+1;i++)
  
{
    
*output = data[i];
    
if(num >1)
      Permutation(data
+1+i,datalen-1-i,output+1,num-1);
    
else
    
{
      
// 一次组合完成,插入处理函数(如果需要中途退出,可以将函数返回值改为bool型)
    }

  }

}

dephi版本
使用

var
  inputdata :
array of Real;
  outputdata : 
array of Real;
  i : integer;
begin
  SetLength(inputdata,
5);
  SetLength(outputdata,
3);
  
for i := 0 to 5 do
    inputdata[i] :
= i;
  Permutation(inputdata,
0,outputdata,0);
end;

代码

procedure Permutation(var inputdata: array of Real;inputpos:integer;var outputdata:array of Real;outputpos:integer);
var
  I: Integer;
begin
  
for I := 0 to High(inputdata) - inputpos - High(outputdata) + outputpos do
  
begin
    outputdata[outputpos] :
= inputdata[inputpos+i];
    
if(outputpos < High(outputdata) )then
      Permutation(inputdata,inputpos
+1+I,outputdata,outputpos+1)
    
else
      cb(outputdata);
//处理函数
  
end;
end;