浙大pat1030

本文介绍了一种使用深度优先搜索算法进行路径规划的方法,通过实例演示了如何实现从起点到终点的最短路径查找。算法的核心在于递归地探索所有可能的路径,并在找到更优解时更新结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//深度优先算法

#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
#include<string>
using namespace std;
//#define fin cin 
int n,m,s,d;
int road[510][510];
int shortest=-1;
int lastcost=-1;
int lastlength;
vector<int> ans;
int cost[510][510];
//df(s,0,way,0);
void df(int from,int length,vector<int> way,int co)
{

if(from==d)
{
if(length<shortest||shortest==-1)
{
shortest=length;
ans=way;
lastcost=co;
lastlength=length;
}
else if(length==shortest&&co<lastcost)
{
shortest=length;
ans=way;
lastcost=co;
lastlength=length;
}
}
else
{
if(find(way.begin(),way.end(),from)==way.end())
way.push_back(from);
for(int i=0;i<n;i++)
{
if(road[from][i]!=-1&&(find(way.begin(),way.end(),i)==way.end()))
{
way.push_back(i);
df(i,length+road[from][i], way, co+cost[from][i]);
way.pop_back();

}
}
}
}






int main()  
{  
/*ifstream fin("d:\in.txt" ); 
if (! fin.is_open())  

cout << "Error opening file";
system("pause");
exit (1); 
}*/


cin>>n>>m>>s>>d;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
road[i][j]=-1;
road[j][i]=-1;
cost[i][j]=-1;
cost[j][i]=-1;
}
}
 
for(int i=0;i<m;i++)
{
int c1,c2,length ,co;
cin>>c1>>c2>>length>>co;
road[c1][c2]=length;
road[c2][c1]=length;
cost[c1][c2]=co;
cost[c2][c1]=co;
}
vector<int> way;
//void df(int from,int length,vector<int> way,int co)
df(s,0,way,0);
for(int i=0;i<ans.size();i++)
{
cout<<ans[i]<<" ";
}
cout<<lastlength<<" ";
cout<<lastcost;






    system("PAUSE");  
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值