List<int[]> list = new List<int[]>(); for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { if (i != j) { int[] array = new int[7]{1, 2, 3, 4, 5, 6, 7}; int n = array[i]; array[i] = array[j]; array[j] = n; list.Add(array); } } }
IEnumerable<char[]> 排列(char[] input, int fromIndex, int toIndex) { if (fromIndex < toIndex) { char m = input[fromIndex]; foreach (char[] right in 排列(input, fromIndex + 1, toIndex)) { yield return right; for (int i = fromIndex + 1; i <= toIndex; i++) { char[] cc = new char[right.Length]; right.CopyTo(cc, 0); cc[fromIndex] = cc[i]; cc[i] = m; yield return cc; } } } else yield return input; yield break; }
例如你可以使用它: foreach (char[] result in 排列("123".ToCharArray(), 0, 2)) { foreach (char c in result) Response.Write(c); Response.Write("<br />"); }
或者: foreach (char[] result in 排列("1234567".ToCharArray(), 0, 6)) ..........用 c# 写,代码还是很简单的。
放在无环List里,从有环链的长度区间RANDOM一个值,有环链指针加个这个值,再取一个
......
取完以后List就是个无排列
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 7; j++)
{
if (i != j)
{
int[] array = new int[7]{1, 2, 3, 4, 5, 6, 7};
int n = array[i];
array[i] = array[j];
array[j] = n;
list.Add(array);
}
}
}
{
if (fromIndex < toIndex)
{
char m = input[fromIndex];
foreach (char[] right in 排列(input, fromIndex + 1, toIndex))
{
yield return right; for (int i = fromIndex + 1; i <= toIndex; i++)
{
char[] cc = new char[right.Length];
right.CopyTo(cc, 0);
cc[fromIndex] = cc[i];
cc[i] = m;
yield return cc;
}
}
}
else
yield return input; yield break;
}
{
foreach (char c in result)
Response.Write(c);
Response.Write("<br />");
}
..........用 c# 写,代码还是很简单的。