遞迴實現全排列

2021-06-28 16:45:24 字數 1658 閱讀 7470

1、如果運算力,和理亂麻的水平不夠。盡量不要復用本地變數(比如c用來計數,「不計數後」,又用來做其它比如作為步長),除非你確認不會出現問題。

2、盡量讓每個邏輯單元(函式內可以有多個邏輯單元)盡量小,邏輯盡量要清晰

3、語言組織能力有限,就說這些了。(**未整理,抱歉了) //

#include "stdafx.h"

#include

#include

int *g_pdata=0;

int g_itotal=4;

typedef struct _testnodetestnode;

void deinitlink(testnode *pnodehead);

int getnodecount(testnode *pnodehead);

int insertnode(testnode **ppnodehead, testnode *pnode, int position);

int getnode(testnode **ppnodehead, int position);

int deletenode(testnode **ppnodehead, int position);

int arrange(testnode **ppnodehead);

testnode *initlink();

int arrangedemo();

int arrangedemo()

testnode *initlink()

else }

return pheadnode; }

int arrange(testnode **ppnodehead)

printf("\n");

return ret; }

int i=0;

for(i=0; ipnode=(testnode *)malloc(sizeof(testnode));

pnode->data=getnode(&pnodehead, i);

pnode->next=0;

deletenode(&pnodehead, i);

arrange(&pnodehead);

insertnode(&pnodehead, pnode, i);

*ppnodehead=pnodehead; }

return ret; }

int getnode(testnode **ppnodehead, int position)

else

else }

}return ret; }

int deletenode(testnode **ppnodehead, int position)

else

else }

}return ret; }

int insertnode(testnode **ppnodehead, testnode *pnode, int position)

else }

else }

}return ret; }

int getnodecount(testnode *pnodehead)

return c; }

void deinitlink(testnode *pnodehead) }

int _tmain(int argc, _tchar* argv)

遞迴實現全排列

生成全排列的最簡單的遞迴方法的思想 1.可以把幾個數字分成前半部和最後一位。對於0123這四個數來說,最後一位 紅色字型 所出現的情況只有以下四類 先不管前三個數的排列組合情況 3 2 1 0這樣我們就把四個數字的排列問題,變成了3個 對於上述的每一行來說 2.終結條件是1個數字的排列就是其本身。直...

全排列遞迴實現

一 遞迴版本 1 演算法簡述 簡單地說 就是第乙個數分別以後面的數進行交換 e g e a b c 則 prem e a.perm b,c b.perm a,c c.perm a,b 然後a.perm b,c ab.perm c ac.perm b abc acb.依次遞迴進 好了,知道演算法之後就...

全排列 遞迴實現

前面我們介紹了全排列的非遞迴演算法,現在我再來寫一下全排列的遞迴演算法 這兩種演算法的演算法思路並不相同。遞迴演算法的思路比較接近於我們現實生活中的思路。1.試想,我們只有兩個數字 12.要對它進行全排列,第一種方式就是12本身,第二種,將12交換,變為21即可。這提示了我們一種交換的思路。2.但這...