【洛谷4009】汽车加油行驶问题(SPFA乱搞)

这篇博客探讨了如何运用SPFA算法解决一个汽车在N×N网格中,从(1,1)到(N,N)寻找最小花费路径的问题。汽车在油库加油需花费A元,坐标变化需花费B元,新建油库需花费C元+A元。通过初始化dis矩阵,从(1,1)出发进行最短路搜索。状态转移包括:加满油、新建油库、沿四个方向行驶。通过转移状态,最终得到最小花费路径的解决方案。" 45013065,1209629,理解TCP/IP的环回接口,"['TCP/IP', '网络协议', 'Linux内核', '网络接口', '路由']

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

点此看题面

大致题意:给定一个 N ∗ N N*N NN的方形网格,其中1表示这个格子有油库,0表示这个格子没油库,且汽车加满油可以行驶 k k k条网格边。如果遇到油库必须加满油并花费 A A A元,如果 X X X坐标或 Y Y Y坐标减少需花费 B B B元,若需新建一个油库需花费 C C C元(另需加油费 A A A元)。问你从 ( 1 , 1 ) (1,1) (1,1) ( N , N ) (N,N) (N,N)的最少花费。


S P F A SPFA SPFA做法

先说明,这篇博客只讲 S P F A SPFA SPFA,不讲网络流。

我们可以用 d i s i , j , l dis_{i,j,l} disi,j,l来表示到达网格 ( i , j ) (i,j) (i,j),还能行驶 l l l条网格边所需的最小花费。

显然,初始化 d i s 1 , 1 , k = 0 dis_{1,1,k}=0 dis1,1,k=0,然后从 ( 1 , 1 ) (1,1) (1,1)出发跑最短路即可。

对于当前状态 ( i , j , l ) (i,j,l) (i,j,l),我们可以这样考虑它的转移:

  • 如果当前还能行驶的距离不等于 k k k(即油未加满)

    • 如果当前网格有油库,那么我们就可以花费 A A A元将状态转移至 ( i , j , k ) (i,j,k) (i,j,k),即:

      d i s i , j , k = m i n ( d i s i , j , k , d i s i , j , l + A ) dis_{i,j,k}=min(dis_{i,j,k},dis_{i,j,l}+A) disi,j,k=min(disi,j,k,disi,j,l+A)

    • 如果当前网格没有油库,那么我们就可以花费 C C

1.问题描述 给定一个N*N 的方形网格,设其左上角为起点,坐标为(1,1),X 轴向右为正,Y 轴 向下为正,每个方格边长为1。一辆汽车从起点出发驶向右下角终点,其坐标为(N,N)。 在若干个网格交叉点处,设置了油库,可供汽车行驶途中加油汽车行驶过程中应遵守 如下规则: (1)汽车只能沿网格边行驶,装满油后能行驶K 条网格边。出发时汽车已装满油,在 起点与终点处不设油库。 (2)当汽车行驶经过一条网格边时,若其X 坐标或Y 坐标减小,则应付费用B,否则 免付费用。 (3)汽车行驶过程中遇油库则应加满油并付加油费用A。 (4)在需要时可在网格点处增设油库,并付增设油库费用C(不含加油费用A)。 (5)(1)(4)中的各数N、K、A、B、C均为正整数。 算法设计: 求汽车从起点出发到达终点的一条所付费用最少行驶路线。 数据输入: 输入数据。第一行是N,K,A,B,C的值,2 <= N <= 100, 2 <= K <= 10。第二行起是一个N*N 的0-1方阵,每行N 个值,至N+1行结束。方阵的第i 行第j 列处的值为1 表示在网格交叉点(i,j)处设置了一个油库,为0 时表示未设油库。 各行相邻的2 个数以空格分隔。 结果输出: 将找到的最优行驶路线所需的费用,即最小费用输出. Sample input 9 3 2 3 6 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 Sample output 12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值