当前位置: 首页 > news >正文

01BFS学习笔记

参考文章

基本思路

  • 使用deque,保证更优路径先被处理只记录最优信息,所以一旦 dist 更新就不再更新,不需要额外松弛。
    • 如果当前边权为 0,则将目标节点 加入队首;
    • 如果当前边权为 1,则将目标节点 加入队尾。
  • 注意当图的边权都是0/1的时候才能用

板子题

P4554

在这里插入图片描述

const int N=500,inf=1e18,mod=998244353;
string a[N];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int dis[N][N];
void solve()
{int n,m;while(cin>>n>>m&&n&&m){forr(i,0,n-1){cin>>a[i];}forr(i,0,n-1)forr(j,0,m-1)dis[i][j]=inf;//要记录路径最小值 先初始化为最大值int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;deque<pii>q;//原点入队q.push_back({x1,y1});dis[x1][y1]=0;int ans=1e18;while(q.size()){auto [x,y]=q.front();q.pop_front();char c=a[x][y];forr(i,0,3){//遍历下一步int nx=x+dx[i],ny=y+dy[i],ndis;//ndis记录走到(nx,ny)的代价,确定是最优才会放入dis数组和deque//判断边界if(nx>n-1||ny>m-1||nx<0||ny<0)continue;//计算代价if(c==a[nx][ny])ndis=dis[x][y];else ndis=dis[x][y]+1;//如果到了目的地 更新答案if(nx==x2&&ny==y2)ans=min(ndis,ans);//确认最优if(ndis<dis[nx][ny]){dis[nx][ny]=ndis;if(c==a[nx][ny])q.push_front({nx,ny});//本次不用消耗代价 贪心地认为是更优的 放到队首else q.push_back({nx,ny});//本次消耗代价的放在队尾}}}cout<<ans<<endl;}
}

P1948 二分+01BFS

在这里插入图片描述

const int N=1e3+10,M=6e3+10,mod=998244353,inf=1e18;
//“最少”成本 免费k个就选最长的k个 
//总费用决定于其中最长的电话线的长度 二分需要花钱的最大值
vector<pii>g[N];
int n,p,k;
int dis[N];
bool check(int x){// forr(i,1,n)forr(j,1,n)dis[i][j]=inf;forr(i,1,n)dis[i]=inf;deque<int>q;q.push_back(1);dis[1]=0;while(q.size()){int now=q.front();q.pop_front();for(auto [nxt,len]:g[now]){int nd;if(len<=x)nd=dis[now];else nd=dis[now]+1;if(nd<dis[nxt]){dis[nxt]=nd;if(len>x)q.push_back(nxt);else q.push_front(nxt);}}}return dis[n]<=k;
}
void solve(){cin>>n>>p>>k;forr(i,1,p){int a,b,l;cin>>a>>b>>l;g[a].push_back({b,l});g[b].push_back({a,l});}int l=0,r=1e7;//二分最长的付费长度int ans=-1;while(l<r){int mid=(l+r)>>1;if(check(mid))r=mid,ans=mid;else l=mid+1;}cout<<ans<<endl;
}
http://www.dtcms.com/a/619311.html

相关文章:

  • 算法奇妙屋(十二)-优先级队列(堆)
  • 东营北京网站建设抚州市网站建设
  • Redis_13_持久化(2)
  • 如何用文件传输协议登陆网站北京做网站公司排名浩森宇特
  • 数学分析简明教程——4.3
  • 技术支持 金华网站建设青羊网站建设
  • 科技广告公司网站模板电商设计接单
  • 作业333333
  • 【复习408】操作系统存储器管理浅析
  • seata的JacksonUndoLogParser回滚SerialArray类型的序列化和反序列化解析
  • 在线做初中题网站网站设计昆明
  • Python中lambda函数与def函数的区别及应用场景
  • 找工作的一些感悟——前端小菜的成长
  • 注册好了域名怎么开始做网站网站建设 网站推广
  • 晋江企业网站建设在深圳注册一个公司需要多少钱
  • “开源AI智能名片链动2+1模式S2B2C商城小程序”在县级市场的应用与挑战分析
  • 大气网站案例网站制作公司备案
  • 16.触摸屏驱动
  • Q7: 在区块链上创建随机数有哪些挑战?
  • 宿城网站建设大连市网站制作电话
  • 做a视频网站有哪些系统优化的目的和意义
  • 网站开发外快如何优化网站打开速度
  • 城市配送联盟平台技术架构深度解析:赋能小 B 端全场景高效配送
  • 公司网站定制自己做网页怎么赚钱
  • 济南网站建设公司按需定制wordpress赞 踩插件
  • 建外贸网站的wordpress源码书籍
  • 织梦网站源码找一品资源企业网站建设费怎么账务处理
  • 如何在国外建设网站百度站长平台验证网站
  • 考研408--组成原理--day3--数字电路(补)加减乘除
  • 深圳企业网站建设推广服务wordpress extra script