2011-11-06 5 views
-1

Google을 사용하여 소스 코드를 찾을 수 없습니다. (java, c, C++) 사실 이진 트리를 사용하고 반복 검색을 사용하는 코드를 찾고 있는데, 원하는 노드의 경로를 알려줍니다.반복 심화 검색 소스 코드

답변

0

어떻게 여기에 대해 자바 : 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