Answering Shortest Path Distance Queries in Large Complex Networks