South African president offers apology to Zimbabwe