Falen om de resultaten af ​​te drukken vanaf de toren van Hanoi met behulp van gekoppelde lijsten

stemmen
-1

Ik ben op zoek naar de Tower of Hanoi uit te voeren met behulp van afzonderlijk verbonden structuur voor een opdracht probleem. Ik krijg steeds de foutmelding Stackonderloop zoals gespecificeerd in de methode isEmpty () onder de Stack klasse. Ik hoop om de volgende te zien wanneer een instantie van de num_of_disks als 3 in de belangrijkste methode:

Verplaats schijf 1 van toren A naar toren C

Verplaats schijf 2 van de toren A naar toren B

Verplaats schijf 1 van de toren C tot toren 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);

    } 
}

Alle hulp wordt zeer gewaardeerd. Bij voorbaat bedankt!

De vraag is gesteld op 19/03/2020 om 21:58
bron van user
In andere talen...                            

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