就保存所有的路径,找出最短最便宜的叭
#include<iostream>
#include<vector>
#include<limits.h>
using namespace std;
struct node
{
int distance;
int cost;
};
int num,roads,c,des;
node map[501][501];
bool vis[501] = {false};
vector<vector<int>> road;
vector<int> path;void DFS(int c,vector<int> & path){
path.push_back(c);
vis[c] = true;
if (c == des)
{
road.push_back(path);
path.pop_back();
vis[c] = false;
return;
}for (int i = 0; i < num; ++i)
{
if(vis[i]==false&&map[c][i].distance!=0)
DFS(i, path);
}
path.pop_back();
vis[c] = false;
}
int main(){node k;
k.cost = 0;
k.distance = 0;
fill(map[0], map[0] + 500 * 500, k);
cin >> num >> roads >> c >> des;
for (int i = 0; i < roads;++i){
int a, b, c, d;
cin >> a >> b >> c >> d;
map[a][b].distance = c;
map[a][b].cost = d;
map[b][a].distance = c;
map[b][a].cost = d;
}
DFS(c, path);
vector<int> res;
int mark = 99999999;
int mincost;
for (int i = 0; i < road.size();++i){
int sum = 0,cost=0;
for (int j = 1; j < road[i].size();++j){
sum += map[road[i][j - 1]][road[i][j]].distance;
cost += map[road[i][j - 1]][road[i][j]].cost;
}
if(sum<mark){
mark = sum;
mincost = cost;
res = road[i];
}
if(sum==mark){
if(cost<mincost)
mincost=cost, res = road[i];
}}
for (int i = 0; i < res.size();++i){
cout << res[i] << " ";
}
cout << mark << " " << mincost;
}