作者tgfh123 (刺河豚)
看板C_Sharp
标题Re: [问题] class 跟 struct
时间Fri Mar 19 00:58:26 2010
解决了,中英混杂比纯英文还要更难看的懂..
是LIST的关系,改为阵列就没有问题了
public class 字元排列
{
字母[] 取样阵列; //全域变数,记录使用者输入的字串
public 字元排列(string 字元集) //把字串拆成一
个个字母,塞进全域变数
{
取样阵列 = new 字母[字元集.Length];
char[] tempchar = 字元集.ToCharArray();
for (int i = 0; i < 字元集.Length; i++)
{
取样阵列[i] = new 字母(tempchar[i]);
}
}
public void 开始排序( List<字母> 之前的字母) //这个方法会
接受上一层传下来的排列到一半的字串
{
List<字母> 我拿过的字母 = new List<字母>(); //区域变数,记
录这层的递回有没有用过这个字母
for (int i = 0; i < 取样阵列.Length; i++) //每一层递回
的回圈,会把所有合乎规则的字母,拿来排
{
if (取样阵列.ElementAt(i).被取走) continue; //如果被上一层
的递回拿走,就跳到下一个
foreach (字母 过去的字母 in 我拿过的字母) //检查区域变数
,看看自己之前是不是有把这个字母拿来排过
{
if (过去的字母.字母元件 == 取样阵列.ElementAt(i).字母
元件) goto 回圈结束;
}
取样阵列[i].拿走(); //经过检查,表示这个字母
可以拿来排,就从全域变数中「拿走」
我拿过的字母.Add(取样阵列[i]); //记录这个字母,以後遇到
这个字母时,直接跳过
之前的字母.Add(取样阵列[i]); //把这个字母,加到上一层
传下来字串
if (之前的字母.Count == 取样阵列.Length) //如果完成排
列字串,就印出来,否则呼叫下一层递回
{
foreach (字母 单字 in 之前的字母)
{
Console.Write(单字.字母元件);
}
Console.WriteLine();
}
else
{
开始排序( 之前的字母);
}
之前的字母.RemoveAt((之前的字母.Count - 1)); //把这个字
母,从上一层传下来字串移除
取样阵列[i].放回(); //把这个字母放回全域变数,准备拿
下一个字母
回圈结束:
;
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.6.12.245
1F:推 F23ko:感谢.... 其实我会问这个 是想到另一种状况.... 03/19 15:59
2F:推 F23ko:例如用vector这个struct的时候 要记录多点时该怎麽用 03/19 16:01
3F:→ F23ko:这样我知道该怎麽做了 感恩~ m(_ _)m 03/19 16:02