程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java算法之字符組合排序

java算法之字符組合排序

編輯:關於JAVA

Java字符組合排序,不是特別難的題目,暴力算和用圖論算(深度遍歷)都可以,結果是198.圖論的話就是構造無向圖,然後深度優先遞歸。
題目:用1、2、2、3、4、5這六個數字,用Java寫一個main函數,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。

Java代碼:

  1. package com.graphic;
  2. import Java.util.Iterator;
  3. import Java.util.TreeSet;
  4. public class CharSequence {
  5. private String[] c = {"1","2","2","3","4","5"};
  6. private int n = c.length;
  7. private boolean[] visited = new boolean[n];
  8. private int[][] g = new int[n][n];
  9. private TreeSet ts = new TreeSet();
  10. private String result = "";
  11. public CharSequence(){
  12. for(int i=0; i
  13. for(int j=0; j
  14. if(i == j) g[i][j] = 0;
  15. else g[i][j] = 1;
  16. }
  17. }
  18. g[3][5] = 0;
  19. g[5][3] = 0;
  20. }
  21. public void depthFirst(int index){
  22. visited[index] = true;
  23. result += c[index];
  24. if(result.length() == n){
  25. ts.add(result);
  26. resultresult = result.substring(0,result.length()-1);
  27. visited[index] = false;
  28. }
  29. else{
  30. for(int i=0; i
  31. if(!visited[i] && g[index][i] == 1){
  32. depthFirst(i);
  33. }else continue;
  34. }
  35. resultresult = result.substring(0,result.length()-1);
  36. visited[index] = false;
  37. }
  38. }
  39. public void graphicGet(){
  40. for(int i=0; i
  41. depthFirst(i);
  42. }
  43. int count = 0;
  44. System.out.print("圖論的結果:");
  45. Iterator it = ts.iterator();
  46. while(it.hasNext()){
  47. String tmp = it.next();
  48. if(tmp.contains("35")) continue;
  49. if(tmp.contains("53")) continue;
  50. if(tmp.charAt(3) == '4') continue;
  51. System.out.println(tmp);
  52. count++;
  53. }
  54. System.out.println("共計:"+count+"個");
  55. }
  56. public void bruteForce(){
  57. System.out.println("暴力搜的結果:");
  58. int count = 0;
  59. for(int i = 122345; i<543222; i++){
  60. String tmp = ""+i;
  61. if(tmp.charAt(3) == '4') continue;
  62. if(tmp.contains("35")) continue;
  63. if(tmp.contains("53")) continue;
  64. if(tmp.contains("5") && tmp.contains("4") && tmp.contains("3") && tmp.contains("1"))
  65. {
  66. int index = tmp.indexOf("2");
  67. if(index == -1) continue;
  68. if(index == tmp.length()-1) continue;
  69. if(tmp.substring(index+1).contains("2")){
  70. System.out.println(tmp);
  71. count++;
  72. }
  73. }
  74. }
  75. System.out.print("共計:"+count+"個");
  76. }
  77. public void recrusive(){
  78. }
  79. public static void main(String[] args) {
  80. CharSequence cs = new CharSequence();
  81. //圖論的方法
  82. cs.graphicGet();
  83. //暴力搜索
  84. cs.bruteForce();
  85. }
  86. }

通過例子,希望會對你有幫助。下面一篇將要介紹Java排序算法總結。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved