有四个任务a、b、c、d,要求得到这四个任务的全排列:
如abcd、abdc等等。如何实现。
急!

解决方案 »

  1.   

    这里不能够使用四个for循环来实现,因为任务的数目是不确定的。
      

  2.   

    abcd
    abdc
    acbd
    acdb
    adbc
    adcb
    bacd
    badc
    bcad
    bcda
    bdac
    bdca
    cabd
    cadb
    cbad
    cbda
    cdab
    cdba
    dabc
    dacb
    dbac
    dbca
    dcab
    dcba
    ------
    public void CombinationCollocate(string ANumbers, string APath, int ALen)
    {
        if (APath.Length >= ALen)
        {
            Console.WriteLine(APath);
            return;
        }
        for (int i = 0; i < ANumbers.Length; i++)
        {
            string vNumbers = ANumbers.Remove(i, 1);
            CombinationCollocate(vNumbers, APath + ANumbers.Substring(i, 1), ALen);
        }
    } /* CombinationCollocate  */private void button1_Click(object sender, EventArgs e)
    {
        CombinationCollocate("abcd", "", 4);
    }
      

  3.   

    摘录:《程序员秘书》--源代码--字符、字符串、文本--字符及对象的排列组合
    private int num = 1;//序号
    private string[] Strs;//字符串数组
    private void button2_Click(object sender, EventArgs e)
    {
        num = 1;
        richTextBox1.Clear();
        Strs = textBox2.Text.Split(new string[]{" "," "},StringSplitOptions.RemoveEmptyEntries);//这里可以将字符串换成 任何类型的对象
        string str = "";//排列的字符串
        for (int i = 0; i < Strs.Length; i++)
            str += (char)i;
        if (str.Length > 0)
        {
            int total = 1;
            for (int i = 1; i <= str.Length; i++)
                total *= i;
            richTextBox1.AppendText(textBox2.Text + " 排列组合总数:" + total + "\n");
            ArrayStrs(str, "", str.Length);//字符串递归排列组合
        }
    }
    private void ArrayStrs(string str, string arrstr, int strlen)//字符串递归排列组合
    {
        if (arrstr.Length == strlen)
        {
            string temp = "";
            for (int i = 0; i < arrstr.Length; i++)
                temp += Strs[(int)arrstr[i]] + " ";
            richTextBox1.AppendText(num++.ToString().PadRight(6, ' ') + temp + "\n");
            return;
        }
        for (int i = 0; i < str.Length; i++)
        {
            string strsub = str.Remove(i, 1);//删除第一个字符
            ArrayStrs(strsub, arrstr + str.Substring(i, 1), strlen);//字符串递归排列组合
        }
    }立即成为编程经验丰富的程序员不是梦,详见http://www.psec.net.cn
      

  4.   

    http://www.codeproject.com/cs/algorithms/combinations.asp