2011-11-06 111 views
-1

我找不到使用谷歌的源代碼。 (java,c,C++) 其實我正在尋找一個需要二叉樹並使用迭代深化搜索的代碼,它給了我想要的節點的路徑。迭代加深搜索源代碼

回答

0

如何在這裏的Java:http://aima-java.googlecode.com/svn/trunk/aima-core/src/main/java/aima/core/search/uninformed/IterativeDeepeningSearch.java

package aima.core.search.uninformed; 

import java.util.Collections; 
import java.util.List; 

import aima.core.agent.Action; 
import aima.core.search.framework.Metrics; 
import aima.core.search.framework.NodeExpander; 
import aima.core.search.framework.Problem; 
import aima.core.search.framework.Search; 

/** 
* Artificial Intelligence A Modern Approach (3rd Edition): Figure 3.18, page 
* 89.<br> 
* <br> 
* 
* <pre> 
* function ITERATIVE-DEEPENING-SEARCH(problem) returns a solution, or failure 
* for depth = 0 to infinity do 
*  result &lt;- DEPTH-LIMITED-SEARCH(problem, depth) 
*  if result != cutoff then return result 
* </pre> 
* 
* Figure 3.18 The iterative deepening search algorithm, which repeatedly 
* applies depth-limited search with increasing limits. It terminates when a 
* solution is found or if the depth- limited search returns failure, meaning 
* that no solution exists. 
* 
* @author Ravi Mohan 
* @author Ciaran O'Reilly 
*/ 
public class IterativeDeepeningSearch extends NodeExpander implements Search { 
    public static final String PATH_COST = "pathCost"; 

    // Not infinity, but will do, :-) 
    private final int infinity = Integer.MAX_VALUE; 

    private final Metrics iterationMetrics; 

    public IterativeDeepeningSearch() { 
     iterationMetrics = new Metrics(); 
     iterationMetrics.set(METRIC_NODES_EXPANDED, 0); 
     iterationMetrics.set(PATH_COST, 0); 
    } 

    // function ITERATIVE-DEEPENING-SEARCH(problem) returns a solution, or 
    // failure 
    public List<Action> search(Problem p) throws Exception { 
     iterationMetrics.set(METRIC_NODES_EXPANDED, 0); 
     iterationMetrics.set(PATH_COST, 0); 
     // for depth = 0 to infinity do 
     for (int i = 0; i <= infinity; i++) { 
      // result <- DEPTH-LIMITED-SEARCH(problem, depth) 
      DepthLimitedSearch dls = new DepthLimitedSearch(i); 
      List<Action> result = dls.search(p); 
      iterationMetrics.set(METRIC_NODES_EXPANDED, 
        iterationMetrics.getInt(METRIC_NODES_EXPANDED) 
          + dls.getMetrics().getInt(METRIC_NODES_EXPANDED)); 
      // if result != cutoff then return result 
      if (!dls.isCutOff(result)) { 
       iterationMetrics.set(PATH_COST, dls.getPathCost()); 
       return result; 
      } 
     } 
     return failure(); 
    } 

    @Override 
    public Metrics getMetrics() { 
     return iterationMetrics; 
    } 

    // 
    // PRIVATE METHODS 
    // 

    private List<Action> failure() { 
     return Collections.emptyList(); 
    } 
} 
+0

日Thnx!我可以定義一個數組來獲取二叉樹。但我怎樣才能讓這個算法通過數組搜索我想要的節點並打印路徑? – user998596

+0

如果您在此處將主要搜索功能(搜索(問題p))應用於問題(p),則會將解決方案返回給您:列表結果 –

+0

對不起。我對此很陌生。你能改變嗎? – user998596