public void decreaseKey(int i, int j, int key) {
		if (key > getValue(i, j)) {
			throw new IllegalArgumentException("key is bigger than current key.");
		}
		if (i== 0 && j == 0) {
			setValue(i, j, key);
			return;
		}
		int maxI = i;
		int maxJ = j;
		if (i > 0 && getValue(i - 1, j) > key) {
			maxI = i - 1;
			maxJ = j;
		}
		if (j > 0 && getValue(i, j - 1) > getValue(maxI, maxJ)) {
			maxI = i;
			maxJ = j - 1;
		}
		if (i != maxI || j != maxJ) {
			setValue(i, j, getValue(maxI, maxJ));
			setValue(maxI, maxJ, key);
		} else {
			setValue(i, j, key);
			return;
		}
		decreaseKey(maxI, maxJ, key);		
	}