def calculateDistance(cityList): distance = 0 counter = len(cityList) i = 0 while counter > 1: nextCity = cityList[i+1] flyToCityDic = UserQuerying.getFlyToCity(cityList[i]) distanceToNextCity = flyToCityDic[nextCity] distance += distanceToNextCity counter -= 1 i += 1 return distance
def calculateCost(cityList): cost = 0 counter = len(cityList) i = 0 while counter > 1: nextCity = cityList[i+1] flyToCityDic = UserQuerying.getFlyToCity(cityList[i]) distanceToNextCity = flyToCityDic[nextCity] rate = 0.35 - 0.05*i if rate <= 0: rate = 0 cost = cost + distanceToNextCity*rate counter -= 1 i += 1 return cost
def testRemoveRoute(self): UserQueryingExpand.removeRoute() source = "Hong Kong" dest = "Shanghai" self.assertFalse(dest in UserQuerying.getFlyToCity(source))
def calculateTime(cityList): flyingTime = 0.0 layoverTime = 0.0 acceleration = 750.0*750/(2*200) counter = len(cityList) i = 0 while counter > 1: nextCity = cityList[i+1] flyToCityDic = UserQuerying.getFlyToCity(cityList[i]) distanceToNextCity = flyToCityDic[nextCity] # calculate the flying time if distanceToNextCity >= 400: accTime = 200.0*2/750 decTime = accTime cruisingTime = (distanceToNextCity - 400.0)/750 flyingTime = flyingTime + accTime + decTime + cruisingTime else: accTime = math.sqrt(2*distanceToNextCity/acceleration) flyingTime = flyingTime + 2*accTime # calculate the layover time if i != 0: cityCode = UserQuerying.nameToCode(cityList[i]) hubNumber = QueryingData.hubCity[cityCode] waitingTime = (120.0 - hubNumber*10)/60 layoverTime = layoverTime + waitingTime counter -= 1 i += 1 return (flyingTime + layoverTime)
def getShortestPath(): ''' This function will find the shortest path between two cities And calculate the distance, cost and consuming time about the Shortest path ''' graph = {} pathList = None source = raw_input("Please enter the source city: \n") destionation = raw_input("Please enter the destination city: \n") for city in QueryingData.cityDicationary: graph[city] = UserQuerying.getFlyToCity(city) pathList = DijkstraAlgorithm.shortestPath(graph, source, destionation) print "Ths shortest path: " for city in pathList: print '>' + city print "" distance = CostHelper.calculateDistance(pathList) cost = CostHelper.calculateCost(pathList) time = CostHelper.calculateTime(pathList) print "Total distance is: " + str(distance) + " kilometers" print "Total cost is: $" + str(cost) print "Total consuming time is: " + str(time) + " hours"
''' Created on Feb 27, 2013 @author: shengchao ''' from DataParse import Parser from DataParse import QueryingData from DataParse import UserQueryingExpand from DataParse import UserQuerying from DataParse import DijkstraAlgorithm Parser.Parser() graph = {} for city in QueryingData.cityDicationary: graph[city] = UserQuerying.getFlyToCity(city) print DijkstraAlgorithm.shortestPath(graph, "Los Angeles", "London")
def testAddRoute(self): UserQueryingExpand.addRoute() source = "Champaign" dest = "Shanghai" self.assertTrue(dest in UserQuerying.getFlyToCity(source))