using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleAppTest
{
class Program
{
static void Main(string[] args)
{
List<string> source = new List<string>() { "a", "b", "c" };
foreach (var i in Perm(source.ToArray(), 0))
{
Console.WriteLine(string.Join(",", i.ToArray()));
}
Permutation(source.ToArray(), 0);
Console.ReadKey();
}
/// <summary>
/// 数组全排列yield
/// </summary>
/// <param name="array"></param>
/// <param name="begin"></param>
/// <returns></returns>
static IEnumerable<string[]> Perm(string[] array, int begin)
{
if (begin == array.Length)
{
yield return array;
}
string t = "";
for (int i = begin; i < array.Length; i++)
{
t = array[i].ToString();
array[i] = array[begin];
array[begin] = t;
foreach (var j in Perm(array, begin + 1)) yield return j;
t = array[i].ToString();
array[i] = array[begin];
array[begin] = t;
}
}
/// <summary>
/// 数组全排列递归
/// </summary>
/// <param name="array"></param>
/// <param name="begin"></param>
static void Permutation(string[] array, int begin)
{
int i = 0;
string t = "";
if (begin == array.Length)
{
Console.WriteLine(string.Join("*", array));
}
else
{
Permutation(array, begin + 1);
for (i = begin + 1; i < array.Length; i++)
{
t = array[begin];
array[begin] = array[i];
array[i] = t;
Permutation(array, begin + 1);
t = array[begin];
array[begin] = array[i];
array[i] = t;
}
}
}
}
}