洛谷P1424小鱼的航程(改进版)Python

本示例展示了如何通过Python读取用户输入,并进行字符串处理及简单的条件判断。通过对输入字符串的拆分、类型转换,进而依据特定条件输出计算结果。

a=input()
b=a.split(' ')
b[0]=int(b[0])
b[1]=int(b[1])
if ((b[0]==7 and b[1]%7!=0) or b[0]==4):
    print(250*(b[1]-2*b[1]//7-1))
else:
    print(250*(b[1]-2*b[1]//7))

### 题目描述 题目 **P1424 小鱼航程** 描述了一只小鱼从起点出发,沿着一条河流游动,并需要经过若干个站点。每个站点之间有一定的距离,且每个站点都有特定的要求(例如停留时间、是否可以跳跃等)。最终目标是计算出小鱼到达终点所需的最短时间和路径。 #### 改进版 Python 解法思路: 我们可以将这个问题视为一个图论问题,其中每个站点是一个节点,边表示两个站点之间的距离。为了求解最短路径和时间,通常可以采用广度优先搜索 (BFS) 或者 Dijkstra 算法。这里我们选择 BFS 来解决问题,因为它适用于无权图或者所有边权重相等的情况,而本题中各个站点间的“代价”相对简单。 ##### 步骤解析: 1. **初始化队列**: 把起始位置加入到待处理队列里。 2. **记录状态信息**: 使用字典或者其他数据结构保存已经访问过的点及其最小花费的时间。 3. **遍历过程**: - 每次取出当前最早入队的那个元素; - 对该点的所有邻居依次尝试前进一步; * 如果能直接抵达未标记的新地点,则更新其时间为现在的时刻加上所需时间并将其放入队尾等待后续探索; * 若遇到特殊规则如休息站等则按要求调整策略再继续前进直到结束为止. 4. **终止条件**: 当成功触达目的地时停止迭代返回结果;如果整个过程中都无法达到目的地方案应报错无法完成任务。 以下是基于上述思想的一个简化版本代码示例: ```python from collections import deque def min_time_to_reach_target(n, edges): # n: number of nodes including start and end point; # edges: list of tuples [(node_a, node_b, travel_time), ...] adj_list = [[] for _ in range(n)] # Adjacency List representation for u, v, w in edges: adj_list[u].append((v,w)) queue = deque([(0, 0)]) # Initialize with starting position at time=0 visited_times = [float('inf')] * n visited_times[0] = 0 while queue: current_node, elapsed_time = queue.popleft() if current_node == n-1: # Reach the target break for neighbor, travel_cost in adj_list[current_node]: new_time = elapsed_time + travel_cost if new_time < visited_times[neighbor]: visited_times[neighbor] = new_time queue.append((neighbor, new_time)) return visited_times[-1] # Example usage: n = 5 # Total points from source to destination inclusive edges_data = [ (0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5) ] print("Minimum Time:",min_time_to_reach_target(n, edges_data)) ``` 这段程序实现了对给定输入的一条最优路线查找功能,即找到从源结点到汇点所耗最少时间的行走方案。对于更复杂的需求比如某些中途需停靠或是有其他限制条件的任务,还需进一步修改算法细节适应变化后的场景需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值