这两天又思考了一阵,总算找到了一种不错的方法,代码如下:
static string[] m_Data = { "A", "B", "C", "D", "E"};
static void Main(string[] args)
{
GetZhuHe(m_Data);
Console.ReadLine();
GetPaiLie(m_Data);
Console.ReadLine();
}
static void GetZhuHe(string[] data)
{
Dictionary
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
dic.Add(data[i], i);
}
GetString(dic,data);
}
static void GetString(Dictionary
{
Dictionary
foreach (KeyValuePair
{
for (int i = kv.Value + 1; i < data.Length; i++)
{
Console.WriteLine(kv.Key + data[i]);
dic.Add(kv.Key + data[i], i);
}
}
if (dic.Count > 0) GetString(dic,data);
}
全排列的算法,代码如下:
static void GetPaiLie(string[] data)
{
Dictionary
- , int> dic = new Dictionary
- , int>();
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
List
list.Add(i);
dic.Add(list, i);
}
GetPaiLieString(dic, data);
}
static void GetPaiLieString(Dictionary
- , int> dd, string[] data)
{
Dictionary
- , int> dic = new Dictionary
- , int>();
foreach (KeyValuePair
- , int> kv in dd)
{
for (int i = kv.Value + 1; i < data.Length; i++)
{
List
for (int j = 0; j <= list.Count; j++)
{
List
temp.Insert(j, i);
OutPut(temp, data);
dic.Add(temp, i);
}
}
}
if (dic.Count > 0) GetPaiLieString(dic, data);
}
static void OutPut(List
{
string temp = string.Empty;
foreach (int n in list)
{
temp += data[n];
}
Console.WriteLine(temp);
}
0 评论:
发表评论