解题思路:
传递糖果的方式是广搜,

先定义一个node结构体

struct node
{
    int num;//节点编号
    int step;//访问步数
};

然后直接上广搜模板

void bfs()
{
    node tmp;
    tmp.num = start;
    tmp.step = 1;
    q.push(tmp);//q是node类型的队列
    now++;//now是已经访问的节点数
    while(!q.empty())
    {
        int v = q.front().num;
        int step0 = q.front().step;
        for(int i = 0; i < g[v].size(); i++)
        {
            if(now == n+1)//n是总节点数
            {
                cout << q.back().step+eat << endl;
                return;
            }
            if(vis[g[v][i]]) continue;
            tmp.num = g[v][i];
            tmp.step = step0+1;
            q.push(tmp);
            vis[tmp.num] = true;//标记已经给过糖果
            now++;
        }
        q.pop();//队首出队
     }
}

再加一个输入程序

void read()
{
    memset(vis,false,sizeof(vis));
    cin >> n >> m >> start >> eat;
    now = 0;
    int x,y;
    for(int i = 1; i > x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
}


注意事项:
从1开始计数
完整代码:

#include <bits/stdc++.h>
using namespace std;
struct node
{
    int num;
    int step;
};
int n,m,start,eat,now;
vector g[1001];//定义邻接表
queue q;//广搜的队列
bool vis[10005];//是否访问过
void read()
{
    memset(vis,false,sizeof(vis));
    cin >> n >> m >> start >> eat;
    now = 0;
    int x,y;
    for(int i = 1; i > x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
}
void bfs()
{
    node tmp;
    tmp.num = start;
    tmp.step = 1;
    q.push(tmp);
    now++;
    while(!q.empty())
    {
        int v = q.front().num;
        int step0 = q.front().step;
        for(int i = 0; i < g[v].size(); i++)
        {
            if(now == n+1)
            {
                cout << q.back().step+eat << endl;
                return;
            }
            if(vis[g[v][i]]) continue;
            tmp.num = g[v][i];
            tmp.step = step0+1;
            q.push(tmp);
            vis[tmp.num] = true;
            now++;
        }
        q.pop();
    }
}
int main()
{
    read();//输入
    bfs();//广搜
    return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论