PAT 1030 最短路径

来源:互联网 发布:gpa标准加权算法 编辑:程序博客网 时间:2024/05/16 05:29
//1030 最短路径#include <iostream>#include <vector>using namespace std;int Dist[505 ][505] = {0};int Cost[505][505] = {0};int N, M, S, D;int CurrDis = 0;int ShortDis = 10000;int visit[505] = {0};vector<int> CurRoad;vector<int> Road;int TotalCost = 10000;int CurCost = 0;void dfs( int curr){int i;if( curr == D){if (CurrDis < ShortDis){ShortDis = CurrDis;Road.clear();for (i = 0;i<CurRoad.size();i++){Road.push_back(CurRoad[i]);}TotalCost = CurCost;}else if(CurrDis == ShortDis){if (TotalCost > CurCost){TotalCost = CurCost;Road.clear();for (i = 0;i<CurRoad.size();i++){Road.push_back(CurRoad[i]);}}}return;}for (i = 0;i<N;i++){if (Dist[i][curr]> 0 && i!= curr && visit[i] == 0){CurrDis += Dist[i][curr];visit[i] = 1;CurRoad.push_back(i);CurCost += Cost[i][curr];dfs(i);visit[i] = 0;CurrDis -= Dist[i][curr];CurRoad.pop_back();CurCost -= Cost[i][curr];}}}int main(){cin >> N >> M >> S >> D;int i;int City1, City2, Dis, Cos;for (i = 0;i< M;i++){cin >> City1 >> City2 >> Dis >> Cos;Dist[City1][City2] = Dis;Dist[City2][City1] = Dis;Cost[City1][City2] = Cos;Cost[City2][City1] = Cos;}dfs(S);cout << S << " ";for (i = 0; i<Road.size();i++){cout << Road[i] << " ";}cout << ShortDis << " "<<TotalCost;return 0;}

0 0
原创粉丝点击