文章

16

粉丝

0

获赞

66

访问

3.5k

头像
走路还是坐公交 题解:
P1678 中南大学机试题
发布于2025年3月14日 23:05
阅读数 254

 

如果按照常规想法,我们会考虑哪些路段走路,哪些路段搭公交,如果这样考虑就掉入陷阱之中了,因为换一组数字其情况完全不同。因为此题需要找最短时间,回顾学过的算法,BFS的特性比较复合,从N出发对坐公交和走路都进行模拟(就如同图的广度优先搜索,我们每一条方案都去试直至找到终点)。分两种情况,一种是走过了N>K,根据题意此时我们只能走路往回走,第二种是还没到,我们可以选择坐公交或者走路,每走一步时间就要加1,直至扫到位置K。

以下是代码

#include<bits/stdc++.h>

using namespace std;

struct node{//定义一个结构体

int x,t;//x表示当前位置,t表示花费时间

}p;

int main(){

int n,k;

while(cin>>n>>k){

if(n>k)//此时是第一种情况

{ cout<<n-k<<endl;break;}

int vis[2*k]={0};//此数组用于标记是否走过该结点

queue<node>q;

q.push({n,0});//起点入队

vis[n]=1;//表示此结点访问过

while(!q.empty())//开始BFS循环

{

      p = q.front();

      q.pop();

      if (p.x == k)//表明已经走到

        break;

      else if (p.x > k)

      { // 走过头了需往回走

        if (!vis[p.x - 1])

        {

          q.push({p.x - 1, p....

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发