2011-05-11 3 views
2

여행용 세일즈맨 문제에 대한 분기 및 바운드 알고리즘을 연구 중이므로 약간의 장애가 있습니다. 나는 꼭지점 (경로)의 부분 집합을 나타내는 노드와 함께 꽤 표준 대기열을 사용하고 있습니다. 나는 모든 것을 처리했음을 확신하지만, 현재 공용 클래스 인 Queue를 가지고 있으며, 그 아래에 모든 속성 (현재 경로, 하한 등)이있는 private 클래스 Node가 있습니다.대기열을 사용하여 TSP (분기 및 바운드) 해결

그러나 내 메인 프로그램에서 노드 대기열을 초기화하고 두 개의 시작 노드를 만들지 만 "노드를 유형으로 확인할 수 없습니다"라는 오류가 발생합니다. Queue 클래스에 있었으므로 주 프로그램에 액세스 할 수 없기 때문에이 코드를 사용한다고 가정했지만,이 코드를 옮기면 노드에 연결된 항목에 오류가 발생합니다.

나는 이것이 정말로 의미가 있기를 바란다. 어떻게 설명해야할지 모르겠다. 그러나 다른 모든 것은 괜찮은 것처럼 보인다. 여기에 설명 내 코드 조각입니다 :

`public class Queue<Item> implements Iterable<Item> { 
    private int N;   // number of elements on queue 
    private Node first; // beginning of queue 
    private Node last;  // end of queue 

    // helper linked list class 
    public class Node { 
     public int level;  //level on the tree 
     public int[] path;  //current path 
     public int bound;  //lower bound 
     public Item item;  
     public Node next;  //the next in the path 
     public boolean inPath; //checks to see if the vertex is in the current path 
     public int missingV; //the vertex that is missing from the path 

    }` 

즉 내가 노드 클래스를 선언하고 실제로 내 메인 프로그램에서 사용하는 곳입니다 : 주, 변화에

`public static void main(String args[]) { 
    int n = 4; 
    int[][] W = new int[][] {{0,2,4,7},{2,0,7,3},{4,7,0,5},{6,3,5,0}}; 
    int[] opttour; 
    Queue<Node> PQ = new Queue<Node>(); 
    Node u = new Node(); 
    Node v = new Node();` 

답변

0

NodeQueue.Node에 :

Queue<Queue.Node> PQ = new Queue<Queue.Node>(); 
    Queue.Node u = PQ.new Node(); 
    Queue.Node v = PQ.new Node(); 
당신 AP 이후 Queue에서 별도의 파일에 Node 클래스를 두는 게 좋을 것

부모가 Queue 클래스 외부에서 그것의 인스턴스를 조작해야합니다.

0

여러분의 Node 클래스는 Queue의 내부 클래스가 아닌 정적이어야한다고 생각합니다.

관련 문제