//--------------------------------------------------------------------------------------------------------赛题入口 void search_route(char *graphStream[5000], int edge_num, char *conditionsStream) { Graph graph; EdgeInfoDict edgeInfoDict; int source; int dest; Conditions conditions; ShortestPathDict pathDict; SK66_D_dict ddict; SK66_F_dict fdict; ReadGraphData(graphStream, graph, edgeInfoDict); // read a.csv ReadConditionsData(conditionsStream, source, dest, conditions); // read b.csv // std::set<int> without; // without.insert(1); // without.insert(2); SK66(source, source, dest, conditions.size(), graph, edgeInfoDict, conditions, ddict, fdict, pathDict); std::pair<std::pair<int, int>, int> key; key.first.first = source; key.first.second = dest; key.second = conditions.size(); Path ansPath = fdict[key]; int ansCost = ansPath.first; std::vector<int> & pointPath = ansPath.second.first; std::vector<int> & edgePath = ansPath.second.second; printf("路径花费 == %d\n", ansCost); printf("共经过了「%d」个结点: ",pointPath.size()); for(std::vector<int>::const_iterator iter = pointPath.begin(); iter != pointPath.end(); ++iter) printf("%d|", (*iter)); printf("\n"); printf("共经过了「%d」条边: ", edgePath.size()); for(std::vector<int>::const_iterator iter = edgePath.begin(); iter != edgePath.end(); ++iter) printf("%d|", (*iter)); printf("\n"); }
//--------------------------------------------------------------------------------------------------------赛题入口 void search_route(char *graphStream[5000], int edge_num, char *conditionsStream) { Graph graph; EdgeInfoDict edgeInfoDict; int source; int dest; Conditions conditions; ShortestPathDict pathDict; ReadGraphData(graphStream, graph, edgeInfoDict); ReadConditionsData(conditionsStream, source, dest, conditions); std::set<int> without; without.insert(1); without.insert(2); Dijkstra(graph, edgeInfoDict, 1, pathDict); PrintGraph(graph, edgeInfoDict); PrintConditions(source, dest, conditions); PrintShortestPathDict(pathDict); }