文章

25

粉丝

0

获赞

27

访问

1.4k

头像
无线网络 题解:BFS(题目有多组案例没说)
P1728 中国海洋大学机试题
发布于2026年2月25日 00:18
阅读数 26

大家上机的时候最好还是写个while循环适配多组案例,题目可能没说,但给的案例还是按照多组的来。

感觉都是对的,结果死活只过25%数据,实在没辙了想看给的数据,但又没钱开大会员,按f12找到了源码,里面一个数据给了四组案例,气笑了,可能经验不足吧,以前没说的都没写while循环,没出事过,这次长点心吧。

题解:

每条边相当于权值为1,直接用BFS;

最多增设k个路由器,可以想象有k点体力,已安装的路由不消耗体力,经过增设的路由器消耗一点体力;

保证搜索到最小步数前体力不为负;

vis分别是节点序号、经过时的体力值两个维度,进行访问标记;

#include <bits/stdc++.h>
using namespace std;
int n,m,k,r;
const int maxn=205;
#define INF 0x3f3f3f3f

struct edge{
    int u,v;
};
int pos[maxn][3];
vector<edge> edges;
vector<int> G[maxn];
//行坐标:节点号
//列坐标:剩余可增设的路由器数量(体力值)
int vis[maxn][maxn];
struct node{
    int i,step,strength;
};

void addedge(int u,int v){
    edges.push_back(edge{u,v});
    int sz=edges.size();
    G[u].push_back(sz-1);
}

int bfs(int s,int e,int strength){
    memset(vis,0,sizeof(vis));
    queue<node> q;
    q.push(node{s,0,strength});
    vis[s][strength]=1;
    while(!q.empty()){
        node now=q.front();
        q.pop();
        for(int i=0;i<G[now.i].si...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发