文章
25
粉丝
0
获赞
27
访问
1.4k
大家上机的时候最好还是写个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...
登录后发布评论
暂无评论,来抢沙发