發表文章

目前顯示的是 6月, 2017的文章

[演算法] [C++ / Python] 深度優先搜尋 Depth-First-Search - Part I

圖片
更新:熱騰騰的 Part II 出爐囉! 深度優先搜尋 , Depth-First-Search,簡稱 DFS,是一種用於圖或樹的遍歷、搜尋演算法。 樹 我們先畫一棵樹如下:   是不是很繽紛呢(X 畫完樹之後,我們要選一個「起點」,在這裡我們選紅色 的   1 。接下來我們可以看到,有三個節點與 1 相連,分別是    2  ,    3  ,    4  。   接下來就是 DFS 的精華:先選一個節點「 深 」入研究,於是在這裡我們先選 2 來進行下一步。 選 2 之後呢?我們會把    2   當作新的起點,再做一次 DFS,因此我們找到了    5  。   糟了,以 5 為起點的話就找不到任何的節點了,這樣就結束了嗎?當然不是,這種情況下我們要返回到上一個節點,也就是 2,看看有沒有還沒去過的節點。   --也沒有,我們只好再回到 1,有了!剛剛先被我們放到一邊的 3 和 4,於是我們選擇    3   作為我們新 DFS 的起點。啊糟糕,原來 3 下面也沒有其他節點了XD    我們只好回到 1,去尋求 4 的幫助(?),我們以    4   為起點進行 DFS,發現有  6  跟    7   兩個節點;依據 DFS 的原則,先訪問其中一個,在這裡選 6,接著回到 4,再走到 7。   因為 7 後面沒有節點了,所以回到 4,再回到 1,結果發現 1 也沒了,因此,DFS 到此全部完畢。 程式碼實作 - C++ void dfs(Node* start){ if (start == nullptr){ // 如果這個位置沒有節點 return; // 返回上一個 } cout << start->data << " visited." << endl; for (int i = 0; i < 3; i++){ dfs(start->next[i]); // 分別以目前所找到的節點作為下一次 DFS 的起點 } } 這裡僅列出重點部分,完整程式碼請至 這裡 查看 程式碼實作 - Python def dfs(s

[C#] ZipFile 類別的使用

圖片
// 版本需求:.Net 4.5以上 有時我們會想把一些資料打包成 ZIP 壓縮檔,這時可以使用 ZipFile 類別。   如果要使用 ZipFile 類別,首先要在程式碼最上方加入: using System.IO; using System.IO.Compression;   然後就可以呼叫 ZipFile.CreateFromDirectory() 函式: ZipFile.CreateFromDirectory(source, destination)   其中的 source 是一個資料夾名,代表把那個資料夾下的所有檔案都加入壓縮檔,並存到 destination。這裡要 注意 的是:source 是資料夾(目錄)的路徑,而 destination 則是包含路徑的檔名。   現在只要把 source 和 destination 放進去就好了嗎? 錯!基本上大部分的人都會遇到一個問題:找不到 ZipFile 這個類別。 奇怪,我們剛剛不是用 using 引入需要的命名空間了嗎?為什麼還不行?   原來是因為我們目前的專案沒有參考到需要的組件- System.IO.Compression.FileSystem,那要怎麼加入?先在方案總管對專案名稱按右鍵,再選 加入 > 參考:   接下來會出現如下視窗,把 System.IO.Compression.FileSystem 打勾:   按下確定就 OK 了。 實際應用 比如說想讓使用者能把目前應用程式的設定值匯出,就可以用到 ZipFile: private void Button8_Click(object sender, EventArgs e) // 「匯出」這個按鈕 { if (saveFileDialog2.ShowDialog() == DialogResult.OK) { string fname = saveFileDialog2.FileName; ZipFile.CreateFromDirectory(path, fname); System.Threading.Thread.Sleep(500); Process.Start("C: