public boolean getPath1(int x, int y, ArrayList<Point> path,
			Hashtable<Point, Boolean> cache) {
		Point p = new Point(x, y);
		if (cache.containsKey(p)) {// alrady visited thsi cell
			return cache.get(p);
		}
		if (x == 0 && y == 0) {
			return true;// found a pth

		}

		boolean success = false;
		if (x >= 1 && isFree(x - 1, y)) {// try right
			success = getPath1(x - 1, y, path, cache);// free!go right

		}

		if (!success && y >= 1 && isFree(x, y - 1)) {// try down
			success = getPath1(x, y - 1, path, cache);// free!go down
		}
		if (success) {
			path.add(p);// right way! add to path
		}
		cache.put(p, success);// Cache result
		return success;
	}