Hanojské veže

Created: 2008-06-19 - 17:03

Hanojske veze

Kedze sa mi totalne, ale totalne nechcelo riesit tento problem, tak som si pomohol uzasnou wikipediou, ktora obsahuje pre tento problem zdrojove kody vo vsetkych najznamejsich programovacich jazykoch. Kedze ten povodny co tam bol, bol dost chaby na pochopenie, tak som tam pridal simulaciu, ktora ukazuje ako sa presuvaju jednotlive disky z tyci.


Hanojske veze na wikipedii

import java.util.Stack;

public class HanojskeVeze {
	public static Stack<String> ta = new Stack<String>();
	public static Stack<String> tb = new Stack<String>();
	public static Stack<String> tc = new Stack<String>();

	public static void main(String args[]) {
		int n = 10;
		for (int i = n; i > 0; i--) {
			ta.push(String.valueOf(i));
		}
		System.out.println("A:" + ta);
		System.out.println("B:" + tb);
		System.out.println("C:" + tc);
		System.out.println("-----");
		hanoi(n, 'A', 'B', 'C');
	}

	// n je pocet diskov, a,b,c reprezentuju tri tyce
	public static void hanoi(int n, char a, char b, char c) {
		if (n == 1) {
			String pom = "e";
			switch (a) {
			case 'A':
				pom = ta.pop();
				break;
			case 'B':
				pom = tb.pop();
				break;
			case 'C':
				pom = tc.pop();
				break;
			default:
				break;
			}
			switch (c) {
			case 'A':
				ta.push(pom);
				break;
			case 'B':
				tb.push(pom);
				break;
			case 'C':
				tc.push(pom);
				break;
			}
			System.out.println("A:" + ta);
			System.out.println("B:" + tb);
			System.out.println("C:" + tc);
			System.out.println("Presunute z " + a + " na " + c);
			System.out.println("-----");
		} else {
			hanoi(n - 1, a, c, b);
			hanoi(1, a, b, c);
			hanoi(n - 1, b, a, c);
		}

	}

}