题意
一个小朋友要坐公交车上学,给出m个从a站到b站公交车的出发时间,花费的时间,花费的钱,我们要求它在t个时间里到达学校的最少花费,如果不能准时到达输出-1。
思路
数据很弱,可以用深搜,还可以用邻接表优化(我这里没做)。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n,t,m,ans;
struct node{
int x,y,leave,time,cost;
}bus[51];
void dfs(int dq,int mo,int ti)//dq代表之前的站点,mo代表已花费的钱,ti代表花费的时间
{
if (dq==n-1) {if (ti<=t) ans=min(ans,mo);return;}
if (mo>ans) return;//如果当前的花费已经大于了之前求的答案我们就可以不用往下求了,因为会更大;这里还可以判断ti是否大于t,但是我这里没打
for (int i=1;i<=m;i++)
{
if (bus[i].x==dq&&(bus[i].leave>ti||bus[i].leave==0&&ti==0))//判断可不可以坐车
dfs(bus[i].y,mo+bus[i].cost,bus[i].leave+bus[i].time);//往下搜
}
}
int main()
{
ans=2147483647;
scanf("%d%d%d",&n,&t,&m);
for (int i=1;i<=m;i++)
scanf("%d%d%d%d%d",&bus[i].x,&bus[i].y,&bus[i].leave,&bus[i].time,&bus[i].cost);
dfs(0,0,0);
if (ans!=2147483647) printf("%d",ans);
else printf("-1");
}
本文介绍了一个简单的公交路径搜索问题及解决方案。通过深度优先搜索(DFS)算法,寻找从起点到终点所有可能的公交路线中成本最低且能在规定时间内到达的方案。如果无法按时到达,则输出-1。
1262

被折叠的 条评论
为什么被折叠?



