程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> leetcode—word ladder II

leetcode—word ladder II

編輯:C++入門知識

1.題目描述



              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              

          
        
      
    

2.解題思路

我一看到這個題目就覺得類似於最小生成樹,應該用貪心算法來做,貪心算法的思路如下:

       從start串出發,找出一次變換可以得到的string串的集合S1,如果集合S1中包含有end串,那麼搜索結束,否則,搜索兩步之內能到達的串的集合S2,同樣判斷兩步之內能到達的串集合中是否有end串,以此類推,最終找到最短路徑。另外,路徑保存需要單獨設置一個數據結構,

最終算法描述如下(類最小生成樹):

於是有了下面的這份代碼:



              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              

          
        
      
    

  

 

提交online judge之後,小數據集沒問題,大數據集卻TLE了,分析了一下,主要是從curStep求nextStep的過程太耗時,我這個是O(N2)的時間復雜度,結果如下:



              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              


              

          
        
      
    

  

 

結果出來的一瞬間很美妙:

image

另外,輸出結果的方式也有改進的余地,如圖所示,程序中的path實際是這麼一張圖,實際就是一張鄰接表。

image

我的算法是從start開始深度搜索,直至找到end,當搜索到的最後一個節點不是end的時候其實都是無效搜索(而且比重很大),所以可以把上述這幅圖反過來,然後從end開始反向搜索,以空間換時間。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved