Java基于遞歸解決全排列問題算法示例
本文實(shí)例講述了Java基于遞歸解決全排列問題算法。分享給大家供大家參考,具體如下:
排列問題
設(shè)R={r1,r2,...,rn}是要進(jìn)行排列的n個(gè)元素,Ri=R-{ri}。集合x中元素的全排列記為Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一個(gè)排列前加上前綴ri得到的排列。R的全排列可歸納如下:
當(dāng)n=1時(shí),Perm(R)=(r),其中r是集合中唯一的元素;
當(dāng)n>1時(shí),Perm(R)由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3)。。。。(rn)Perm(Rn)構(gòu)成。
public class AllSort { public static void perm(int[] list, int k, int m) { if( k == m) { for (int i = 0; i <=m; i++) { System.out.print(list[i]); } System.out.println(); } else{ for(int i = k; i <= m; i++) { swap(list,k,i); perm(list, k+1 , m); swap(list,k,i); } } } public static void swap(int[] list, int a, int b) { int temp; temp = list[a]; list[a] = list[b]; list[b] = temp; } public static void main(String args[]) { int[] list = new int[5]; for(int i = 0; i < list.length; i++) { list[i] = i+1; } perm(list,0,list.length-1); } }
運(yùn)行結(jié)果:
12345 12354 12435 12453 12543 12534 13245 13254 13425 13452 13542 13524 14325 14352 14235 14253 14523 14532 15342 15324 15432 15423 15243 15234 21345 21354 21435 21453 21543 21534 23145 23154 23415 23451 23541 23514 24315 24351 24135 24153 24513 24531 25341 25314 25431 25413 25143 25134 32145 32154 32415 32451 32541 32514 31245 31254 31425 31452 31542 31524 34125 34152 34215 34251 34521 34512 35142 35124 35412 35421 35241 35214 42315 42351 42135 42153 42513 42531 43215 43251 43125 43152 43512 43521 41325 41352 41235 41253 41523 41532 45312 45321 45132 45123 45213 45231 52341 52314 52431 52413 52143 52134 53241 53214 53421 53412 53142 53124 54321 54312 54231 54213 54123 54132 51342 51324 51432 51423 51243 51234
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法
這篇文章主要介紹了JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法,實(shí)例分析了java發(fā)送超文本文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05java實(shí)現(xiàn)的統(tǒng)計(jì)字符算法示例
這篇文章主要介紹了java實(shí)現(xiàn)的統(tǒng)計(jì)字符算法,涉及java針對字符的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn)教程
開發(fā)過程中,后臺的參數(shù)校驗(yàn)是必不可少的,下面這篇文章主要給大家介紹了關(guān)于SpringBoot參數(shù)校驗(yàn)的最佳實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08AgileBoot?項(xiàng)目內(nèi)統(tǒng)一的錯(cuò)誤碼設(shè)計(jì)分析
這篇文章主要為大家介紹了AgileBoot?項(xiàng)目內(nèi)統(tǒng)一的錯(cuò)誤碼設(shè)計(jì)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10java 實(shí)現(xiàn)Comparable接口排序,升序、降序、倒敘
這篇文章主要介紹了java 實(shí)現(xiàn)Comparable接口排序,升序、降序、倒敘,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java實(shí)現(xiàn)的可選擇及拖拽圖片的面板功能【基于swing組件】
這篇文章主要介紹了Java實(shí)現(xiàn)的可選擇及拖拽圖片的面板功能,涉及java基于swing組件選擇與操作圖片元素的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01