PAT 1030. Travel Plan (30)

来源:互联网 发布:js上两个兄弟元素 编辑:程序博客网 时间:2024/04/25 21:29
#include<iostream>#include<vector>#include<cstring>#define MAX 501#define MAXWEIGHT 250005using namespace std;int n, m, s, d;int adj_dis[MAX][MAX] = { 0 };int adj_cost[MAX][MAX] = { 0 };int min_len = MAXWEIGHT, min_cost = MAXWEIGHT;int vst[MAX] = { 0 };vector<int> path, final_path;void dfs(int v){if (v == d){int len = 0, cost = 0;for (int i = 1; i < path.size(); i++){len += adj_dis[path[i]][path[i - 1]];cost += adj_cost[path[i]][path[i - 1]];}if (len < min_len){min_len = len; min_cost = cost;final_path.resize(path.size());memcpy(&final_path[0], &path[0], path.size()*sizeof(int));}else if (len == min_len&&min_cost > cost){min_cost = cost;final_path.resize(path.size());memcpy(&final_path[0], &path[0], path.size()*sizeof(int));}vst[v] = 0;path.pop_back(); return;}for (int i = 0; i < n; i++){if (adj_dis[v][i] != 0 && !vst[i]){path.push_back(i);vst[i] = 1;dfs(i);}}vst[v] = 0;path.pop_back();return;}int main(){cin >> n >> m >> s >> d;for (int i = 0; i < m; i++){int a, b, dis, cost;cin >> a >> b >> dis >> cost;adj_dis[a][b] = adj_dis[b][a] = dis;adj_cost[a][b] = adj_cost[b][a] = cost;}path.push_back(s); vst[s] = 1;dfs(s);cout << final_path[0];for (int i = 1; i < final_path.size(); i++){cout << " " << final_path[i];}cout << " " << min_len << " " << min_cost;}

0 0
原创粉丝点击