Fail pentru a imprima rezultatele de la Turnul din Hanoi, folosind Lista de legat

voturi
-1

Am încercat să pună în aplicare Turnul din Hanoi, folosind structura individual legat de o problemă de atribuire. I a păstra achiziție mesajul de eroare „Stiva fluxurilor inferioare“, așa cum este specificat în metoda isEmpty (), în conformitate cu clasa stivă. Sper să văd ce urmează atunci când am instantia num_of_disks ca 3 în metoda principală:

Mutare disc 1 din turnul A la turnul C

Mutare disc 2 din turnul A la turnul B

Mutare disc 1 din turnul C la turnul B

class Stack {
    private Node top;

    class Node {
        int data;
        Node next;

        Node(Stack stack) {
            stack = new Stack();
        }
    }
    public boolean isEmpty(Stack stack) {
        if(stack.top == null)
            return true;
        else
            return false;
    }
    public int push(Stack stack, int value) {
        Node newNode = new Node(stack);

        newNode.data = value;
        newNode.next = top;
        top = newNode;

        return newNode.data;
    }
    public int pop(Stack stack) {
        int temp = 0;

        if(isEmpty(stack)) {
            System.out.println(Stack underflow);
            System.exit(1);
        }
        else {
            temp = top.data;
            top = top.next;
        }
        return temp;
    }
    public void show(Stack stack) {
        Node currentNode = top;

        while(currentNode.next != null) {
            System.out.print(currentNode.data +  => );
            currentNode = currentNode.next;
        }
        System.out.print(currentNode.data);
    }
}
class TOH {
    private Stack stk;

    TOH() {
        stk = new Stack();
    }

    void moveDisksBetweenTwoPoles(Stack src, Stack dest, char s, char d) { 
        int pole1TopDisk = stk.pop(src); 
        int pole2TopDisk = stk.pop(dest); 

        if (pole1TopDisk == 0) { 
            stk.push(src, pole2TopDisk); 
            moveDisk(d, s, pole2TopDisk); 
        } 
        else if (pole2TopDisk == 0) { 
            stk.push(dest, pole1TopDisk); 
            moveDisk(s, d, pole1TopDisk); 
        } 
        else if (pole1TopDisk > pole2TopDisk) { 
            stk.push(src, pole1TopDisk); 
            stk.push(src, pole2TopDisk); 
            moveDisk(d, s, pole2TopDisk);
        } 
        else { 
            stk.push(dest, pole2TopDisk); 
            stk.push(dest, pole1TopDisk); 
            moveDisk(s, d, pole1TopDisk); 
        } 
    } 

    void moveDisk(char fromPeg, char toPeg, int disk) { 
        System.out.println(Move disk  + disk +  
                         from + fromPeg +  to  + toPeg); 
    } 
    void loadstartTower(int num_of_disks, Stack src) {
        for(int i = num_of_disks; i >= 1; i--) {
            stk.push(src, i);
        }
    }
    int totNumOfMoves(int num_of_disks) {
        int total_num_of_moves = (int)(Math.pow(2, num_of_disks) - 1);
        return total_num_of_moves;
    }
    void tohIterative(int num_of_disks, Stack src, Stack aux, Stack dest) { 
        int i, total_num_of_moves; 
        char s = 'A', d = 'B', a = 'C'; 

        if (num_of_disks % 2 == 0) { 
            char temp = d; 
            d = a; 
            a  = temp; 
        } 

        loadstartTower(num_of_disks, src);

        for (i = 1; i <= totNumOfMoves(num_of_disks); i++) {
            if (i % 3 == 1) 
              moveDisksBetweenTwoPoles(src, dest, s, d); 

            else if (i % 3 == 2) 
              moveDisksBetweenTwoPoles(src, aux, s, a); 

            else if (i % 3 == 0) 
              moveDisksBetweenTwoPoles(aux, dest, a, d); 
        } 
    } 
}
public class Main {
    public static void main(String[] args) { 
        int num_of_disks = 3; 

        TOH ob = new TOH(); 
        Stack src = new Stack();
        Stack dest = new Stack();
        Stack aux = new Stack(); 

        ob.tohIterative(num_of_disks, src, aux, dest);

    } 
}

Orice ajutor este apreciat. Mulțumesc anticipat!

Întrebat 19/03/2020 la 21:58
sursa de către utilizator
În alte limbi...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more