全排列遞歸算法理解 有誰(shuí)會(huì)用遞歸做全排列???
有誰(shuí)會(huì)用遞歸做全排列啊?proc(int step)函數(shù)用于實(shí)現(xiàn)遞歸的主過(guò)程,step參數(shù)用于指示當(dāng)前proc函數(shù)中放置的置換數(shù)。使用的數(shù)組用于標(biāo)記某個(gè)數(shù)字是否出現(xiàn)在上一次完全置換中。如果它出現(xiàn)了,就
有誰(shuí)會(huì)用遞歸做全排列?。?/h2>
proc(int step)函數(shù)用于實(shí)現(xiàn)遞歸的主過(guò)程,step參數(shù)用于指示當(dāng)前proc函數(shù)中放置的置換數(shù)。使用的數(shù)組用于標(biāo)記某個(gè)數(shù)字是否出現(xiàn)在上一次完全置換中。如果它出現(xiàn)了,就不能再完全排列了。如果它沒(méi)有出現(xiàn),它將被放入完全排列中,并用所用的數(shù)組進(jìn)行標(biāo)記。并在回溯過(guò)程中清除已用標(biāo)志。結(jié)果數(shù)組用于保存n個(gè)完全置換。如果proc函數(shù)已經(jīng)完成了n個(gè)數(shù)字的輸入,那么print函數(shù)將被調(diào)用以打印出完整的排列。
用遞歸算法編n!的全排列?
Void genpermutation(int k,int n,int*perm){
if(k>=n){
for(int i=0,i
cout]}
]cout
}
]for(int i=k i
swap(perm[i],perm[k])
genpermutation(k 1,n,perm)
swap(perm[i],perm[k])
pascal語(yǔ)言用遞歸實(shí)現(xiàn)全排列?
const max=9var m,n:long a:數(shù)組[1。。Max]of long procedure work(J,K:long)//J是枚舉中的數(shù)字J,K表示最后一個(gè)枚舉值var I:long begin如果J=m1,那么begin For I:=1 to M-1 do write(a[I],“)//輸出writeln(a[M])end else for I:=k1 to N-mj do//第I個(gè)范圍使得k1易于理解并且N-mj可以用數(shù)學(xué)方法證明。例8 3,那么第一個(gè)最大范圍是1~6,第二個(gè)最大范圍是2~7,3~8,所以開(kāi)始a[J]:=I work(J 1,I)//回溯end end begin readln(n,m)work(1,0)end