#include<iostream>
#include<vector>
using namespace std;
const int inf=99999999;
int N,M,S,D;
int Cost[510][510];
int Dis[510][510];
vector<int> temppath,path;
bool visit[510]={false};
int mincost=inf;
int mindis=inf;
void dfs(int x,int destination)
{
if(x==destination)
{
int tempdis=0,tempcost=0;
for(int i=0;i<temppath.size()-1;i++)
{
int id=temppath[i],nextid=temppath[i+1];
tempdis+=Dis[id][nextid];
tempcost+=Cost[id][nextid];
}
if(tempdis<mindis)
{
path=temppath;
mincost=tempcost;
mindis=tempdis;
}
if(tempdis==mindis&&tempcost<mincost)
{
path=temppath;
mincost=tempcost;
}
return;
}
for(int i=0;i<N;i++)
{
if(Dis[x][i]==inf||i==x||visit[i]==true)
continue;
visit[i]=true;
temppath.push_back(i);
dfs(i,destination);
temppath.pop_back();
visit[i]=false;
}
return;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
fill(Dis[0],Dis[0]+510*510,inf);
cin>>N>>M>>S>>D;
int c1,c2,dis,cost;
for(int i=0;i<M;i++)
{
cin>>c1>>c2>>dis>>cost;
Dis[c1][c2]=dis;
Dis[c2][c1]=dis;
Cost[c1][c2]=cost;
Cost[c2][c1]=cost;
}
temppath.push_back(S);
dfs(S,D);
for(int i=0;i<path.size();i++)
cout<<path[i]<<" ";
cout<<mindis<<" "<<mincost;
return 0;
}
1030 Travel Plan(纯暴力DFS,30分,没有用Dijkstra)
最新推荐文章于 2024-07-01 11:24:18 发布