作者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
推 F23ko:感謝.... 其實我會問這個 是想到另一種狀況.... 03/19 15:59
推 F23ko:例如用vector這個struct的時候 要記錄多點時該怎麼用 03/19 16:01
→ F23ko:這樣我知道該怎麼做了 感恩~ m(_ _)m 03/19 16:02