排列组合算法

给出任意几个字符,列出所有的排列组合。


方法一:
        
public static List<List<string>> zuhe(List<string> arr)

        {

            List
<List<string>> rtn;

            
if (arr.Count == 1)

            {

                rtn 
= new List<List<string>>(1);

                rtn.Add(arr);

                
return rtn;

            }

            rtn 
= new List<List<string>>();

            
for (int i = 0; i < arr.Count; i++)

            {

                List
<string> tmp = new List<string>(arr.Count);

                tmp.AddRange(arr);

                
string prefix = tmp[i];

                tmp.RemoveAt(i);

                List
<List<string>> temp = zuhe(tmp);

                
for (int j = 0; j < temp.Count; j++)

                    temp[j].Insert(
0, prefix);

                rtn.AddRange(temp);

            }

            
return rtn;

        }

方法二:
using System;

using System.Collections.Generic;

using System.Text;

using System.Collections;

using System.IO;



namespace Date1219

{

    
class NumArrangement

 {

        
/**//// <summary>

        
/// 实现任意输入字符串的全排列

        
/// </summary>

        
/// <param name="str"></param>

        
/// <returns></returns>

        
public ArrayList Arrange(string str)

     {

            ArrayList list 
= new ArrayList();

            
for (int i = 0; i < str.Length; i++)

            {

                list 
= InsertValue(str[i].ToString(), list);

            }

            
return list;

        }



        
public ArrayList InsertValue(string str, ArrayList list)

  {

            
int rowct = list.Count;

            
int rayct;



            ArrayList list2 
= new ArrayList();



            
if (list.Count >0)

            {

                ArrayList temp 
= (ArrayList)list[0];

                rayct 
= temp.Count;



                
for (int i = 0; i < rowct; i++)

                {

                    
for (int j = 0; j < rayct+1; j++)

                    {

                        ArrayList list4 
= new ArrayList((ArrayList)list[i]);//Arraylist 的深度复制

                        

                        list4.Insert(j, str);

                        list2.Add(list4);

                    }

                }



            }

            
else

           {

                 rayct 
= 0;

                 list.Add(str);

                 list2.Add(list);

            }

            

            
return list2;

        }



        
//打印

        
public void PrintList(ArrayList list)

        {

            
for (int i = 0; i < list.Count; i++)

           {

                ArrayList list2 
= (ArrayList)list[i];

                
for (int j = 0; j < list2.Count; j++)

               {

                    Console.Write(list2[j] 
+ " ");

                }

                Console.WriteLine();

            }

            Console.ReadLine();

        }

    }



    
class Test

    {

        
public static void Main(String[] args)

       {

            NumArrangement na 
= new NumArrangement();



            
//交互界面

            Console.WriteLine(
"Input your Num:");

            
string input = Console.ReadLine();

            Console.WriteLine(
"Your Number Arrangement:");



            ArrayList list 
= na.Arrange(input);

            na.PrintList(list);

            

        }

    }

}
posted @ 2008-07-01 23:52 君子兰` 阅读(304) 评论(1)  编辑 收藏 网摘 所属分类: C# _____________

  回复  引用    
#1楼 2008-12-03 14:02 | lewis [未注册用户]
请您把14组310的任意组合结果发给我嘛,万分感激,我用土办法算了三天了,还没有算清楚,有4782969种结果.
例如:33333333333333
33300033001100
再次跪拜

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接:

所属分类的其他文章:
URL分页类
排列组合算法