一个国外论坛上看到的相近算法,很有点意思!
///
/// 集合所有排列
/// var c1 = new string[] { "L", "Z", "G", "H" };
/// SetAlgorithms.Arrangement(c1.Length, 3, (result, len) => {
///Console.WriteLine("{0}{1}{2}", c1[result[0]], c1[result[1]], c1[result[2]]);
///return true;
/// });
///
【根据集合排列出所有可能组合】
public static class SetAlgorithms
{
public delegate bool SetAlgorithmCallback(int[] result, int length);
static bool CheckNM(int n, int m)
{
if (m > n || m < 0 || n < 0)
{
throw new ArgumentException();
}if (m == 0 || n == 0)
return false;
return true;
}static bool Arrangement(int n, int rlen, int[] result, SetAlgorithmCallback callback)
{
if (rlen == result.Length)
return callback(result, rlen);
for (int i = 0;
i < n;
++i)
{
bool skip = false;
for (int j = 0;
j < rlen;
++j)
{
if (result[j] == i)
{
skip = true;
break;
}
}if (skip) continue;
result[rlen] = i;
if (!Arrangement(n, rlen + 1, result, callback))
return false;
}return true;
}public static void Arrangement(int n, int m, SetAlgorithmCallback callback)
{
if (!CheckNM(n, m)) return;
var result = new int[m];
for (int i = 0;
i < n;
++i)
{
result[0] = i;
if (!Arrangement(n, 1, result, callback))
return;
}
}
}
推荐阅读
- C#|C# 文件路径操作
- C# 接口实例
- C#|10、接口、抽象、密封、开放封闭原则
- c#|11、C#处理程序异常的技术
- C#|九、C#结构 类 属性
- C#|c# HashtableTo Json 字符串 HashtableToWxJson
- 分表分库(百亿级大数据存储)
- C#|微信小程序开发系列(六)——“处理请求时出错”怎么处理()
- c#做的一个简单的包含实时进度的进度条
- asp.net|c#文件写入与获取post请求数据