您的位置:首页 > 其它

全排列算法的非递归实现

2014-05-11 18:14 239 查看
//本代码转自网络

long begintime = Environment.TickCount;

private void button6_Click(object sender, EventArgs e)

{

int slen = 4;//长度

int wlen = 3;//位数,<=长度

List<string> sarr = new List<string>();

for (int i = 1; i <= slen; i++)

{

sarr.Add(i.ToString());

}

string ts = string.Empty;

Random rad = new Random();

ArrayList al = new ArrayList();//数组

int len = 1;//总数

int tlen = slen - wlen + 1;//排列

while (slen >= tlen)

{

len = len * (slen--);

}

while (al.Count < len)

{

while (ts.Length < wlen)

{

string tmp = sarr[rad.Next(sarr.Count)];

if (ts.IndexOf(tmp) < 0)

ts += tmp;

}

if (!al.Contains(ts))

al.Add(ts);//添加

ts = "";

}

al.Sort();//排序

long endtime = Environment.TickCount;

long stime = endtime - begintime;//耗时

MessageBox.Show(string.Format("排列出{0}个不相同且无重复数字的{1}位数!/r/n耗时{2}毫秒", len, wlen, stime));

richTextBox1.Clear();

for (int i = 0; i < al.Count; i++)

{

richTextBox1.AppendText(al[i].ToString() + "/r/n");//输出

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: