Traditional Dijkstra and Bellman-Ford routing algorithms can only provide the best route to each destination based on a fixed link cost model. We propose a utility-based routing model that can provide different optimal routes for different routing requirements captured by the benefit value of the successful delivery of a data packet in a network with unstable links. The challenges lie in the identification of the relationship between the benefit values and the optimal routes without exhausting all possible routes. This can be exponential to the number of nodes in the worst case. We analyze the relationship between the benefit values and the optimal routes, and the relationship between different optimal routes. Based on this analysis, we propose an efficient algorithm that can compute all optimal routes by exploiting a unique property of the model. We also implement the algorithm in a distributed and parallel way, and conduct intensive simulations to verify our results.