★★★★★ 龙门乱弹 ★★★★★

▓木浮于水,而皓月当空▓ 关注Java程序设计▓Linux系统▓人工智能(AI)进展▓数学▓

  BlogJava :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  39 随笔 :: 2 文章 :: 170 评论 :: 0 Trackbacks
  1  /*
  2  * Created on Oct 22, 2004
  3  *
  4  * To change the template for this generated file go to
  5  * Window>Preferences>Java>Code Generation>Code and Comments
  6  */
  7 
  8 /**
  9  * @author WangBNU helloquota@163.com My Homepage http://bnulinux.yeah.net To
 10  *         change the template for this generated type comment go to
 11  *         Window>Preferences>Java>Code Generation>Code and Comments
 12  */
 13 public class PaiLie {
 14     public static void main(String args[]) {
 15         int leng = args[0].length();
 16         int[] a = new int[leng];
 17         boolean[] c = new boolean[leng];
 18         for (int i = 0; i < leng; i++) {
 19             a[i] = i + 1;
 20             c[i] = false;
 21         }
 22         int ii = findActiveM(a, c);
 23 
 24         for (int i = 0; i < args[0].length(); i++)
 25             System.out.print(a[i]);
 26         System.out.println();
 27 
 28         if (ii >= 0) {
 29             do {
 30                 int activeM = a[ii];
 31                 if (c[ii] == false) {
 32                     swapInt(a, ii, ii - 1);
 33                     swapBoolean(c, ii, ii - 1);
 34                 } else {
 35                     swapInt(a, ii, ii + 1);
 36                     swapBoolean(c, ii, ii + 1);
 37                 }
 38                 for (int i = 0; i < args[0].length(); i++) {
 39                     System.out.print(a[i]);
 40                     if (a[i] > activeM)
 41                         c[i] = !c[i];
 42                 }
 43                 System.out.println();
 44                 ii = findActiveM(a, c);
 45 
 46             } while (ii >= 0);
 47         }
 48     }
 49 
 50     /**
 51      * @param aa
 52      *
 53      * @param a
 54      * @param b
 55      */
 56     private static void swapInt(int[] aa, int a, int b) {
 57         int temp = aa[a];
 58         aa[a] = aa[b];
 59         aa[b] = temp;
 60     }
 61 
 62     private static void swapBoolean(boolean[] aa, int a, int b) {
 63         boolean temp = aa[a];
 64         aa[a] = aa[b];
 65         aa[b] = temp;
 66     }
 67 
 68     private static int findActiveM(int[] a, boolean[] c) {
 69 
 70         int first1 = 0, first2 = 0;
 71         int m = -1, n = -1;
 72         for (int i = 1; i < a.length - 1; i++) {
 73             if (c[i] == false) {
 74                 if ((a[i] > a[i - 1]) && a[i] > first1) {
 75                     first1 = a[i];
 76                     m = i;
 77                 }
 78             } else {
 79                 if ((a[i] > a[i + 1]) && a[i] > first2) {
 80                     first2 = a[i];
 81                     n = i;
 82                 }
 83             }
 84         }
 85         if ((c[0== true&& (a[0> a[1]) && (a[0> first2)) {
 86             first2 = a[0];
 87             n = 0;
 88         }
 89         if ((c[a.length - 1== false&& (a.length > 1)
 90                 && (a[a.length - 1> a[a.length - 2])
 91                 && (a[a.length - 1> first1)) {
 92             first1 = a[a.length - 1];
 93             m = a.length - 1;
 94         }
 95         if (first1 >= first2)
 96             return m;
 97         else
 98             return n;
 99     }
100 
101 }
102 



posted on 2005-09-21 13:27 LoveBNU 小六 WangBNU 阅读(2686) 评论(1)  编辑  收藏 所属分类: Java编程算法之妙

评论

# re: 全排列算法 java 实现 2009-02-16 00:07 Rjx
一句注释都没=。=
唉。。。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: