上文簡單介紹了iqcar遊戲。接下來將描述用計算機如何求出它的解法。
學過資料結構的,第一感覺就是用「深度優先搜尋」或者是「廣度優先演算法」。就是不停的嘗試每一種可能,直到到達解。然後將嘗試的過程輸出即可。
仔細觀察上文的,發現,每一輛車的可能性位置可能性非常少(由於車子只能前後移動,故長度為3的車子只有4種可能,長度為2的車子有五種可能)。那麼,則這些車子排列的可能性就不會多(原因是,如果車子多,則彼此之間的限制會很多,因為兩輛車不能擠在乙個格仔裡,如果車子少,雖然限制少但是車子少,必然總數少)。這樣,一般的題目,把所有的車子排列構成乙個集合的話,這個集合中的元素不會很多(實際情況是,一般的題目,這個集合的元素在1200左右)。
想到這,我想到用圖論的方法求解。
所有的車子的乙個位置排列,成為圖中的乙個點,兩點之間的連線表示能從乙個排列移動乙個位置到另乙個排列。題目中的初始狀態為圖中的乙個點,達到解題條件的為另乙個點(這樣的點可能不止乙個),問題就轉化為在圖中從乙個點找到到另乙個點的通路。
這個求通路的有乙個非常有名的演算法,dijkstra演算法(最短路徑演算法)。
那麼本問題就轉化為兩個步驟
1、根據輸入的初始狀態,生成乙個集合,所有車子的乙個位置排列為集合中的乙個元素。並且為每乙個元素建立他們之間的關係(有連線則表示能從乙個排列移動乙個位置到另乙個排列,反之則無連線)。
2、用dijkstra演算法求出一條通路,這條通路也是最短通路,也就是最優解
注:寫完程式後,細細想來,在本題中,由於各連線的長預設都是1,dijkstra演算法其實就是廣度優先演算法。
後文將具體的描述各個模組的實現。
快速排序的解題思路
一 分而治之 一種著名的遞迴式問題解決方法。英文全稱 divide and conquer 簡稱d c,它提供了解決問題的思路。使用d c解決問題的過程需要兩個步驟 1 找出基線條件,這種條件必須盡可能簡單 2 不斷將問題分解 或者說縮小規模 直到符合基線提交。遞迴條件 舉例 假如你有一塊土地,它的...
我的騰訊looksalike解題思路
賽題 分析 1.使用者是多個,廣告也是多個,乙個使用者可能對多個廣告產生行為,乙個廣告也可能被對多個使用者點選,這顯然是不好處理的.我們假設只有乙個廣告,那麼他對於使用者而言只有兩種情況,被點選和不被點選,這就成了乙個二分類的問題.我們把使用者特徵與廣告特徵拼接,作為x,把與x對應的是否點選作為y,...
實現自動矩陣解題演算法的一種思路
自動解題機演算法 二次以上的方程,對於方程組的表示式,處理起來純粹是一種字串的變換然後,使用實時編譯器,進行自動求解 string functiona a x x b y y c string functionb m x x n y y d fa變換為 a x x c b y y x x c b y...