首页 > 其他分享 >01 bfs 学习笔记

01 bfs 学习笔记

时间:2024-10-18 09:42:50浏览次数:12  
标签:ch 笔记 bfs push 01 front stx sty dis

当一张图的边权只有 \(0\) 和 \(1\) 时,跑 dij 的堆优化显得比较累赘。因为只有两个取值,所以取 \(0\) 的时候在队列前面推进来,反之在后面。其他和 dij 没什么区别,时间复杂度 \(O(m)\),其中 \(m\) 是边数。

相关题目:P4554 小明的游戏

点击查看代码
void work() {
	m0(vis); mem(dis,0x3f);
	For(i,0,n-1) For(j,0,m-1) cin>>ch[i][j];
	cin>>stx>>sty>>edx>>edy; dis[stx][sty]=0;
	deque<node>q; while(!q.empty()) q.pop_front();
	q.push_front({stx,sty});
	while(!q.empty()) {
		auto [x,y]=q.front(); q.pop_front();
//		cout<<x<<' '<<y<<'\n';
		if(vis[x][y]) continue;
		vis[x][y]=1;
		For(i,1,4) {
			int X=x+dx[i],Y=y+dy[i];
			if(X>=n||X<0||Y>=m||Y<0) continue;
			int val=(ch[x][y]!=ch[X][Y]);
			if(dis[x][y]+val>=dis[X][Y]) continue;
			dis[X][Y]=dis[x][y]+val;
			if(ch[x][y]==ch[X][Y]) {
				q.push_front({X,Y});
			} else {
				q.push_back({X,Y});
			}
		}
	}
	cout<<dis[edx][edy]<<'\n';
}

标签:ch,笔记,bfs,push,01,front,stx,sty,dis
From: https://www.cnblogs.com/CodingGoat/p/18473614

相关文章

  • DAY01
    DAY01什么是计算机能按照程序运行,自动、高速处理海量数据的现代化智能电子设备;有硬件和软件组成。硬件io设备->输入输出设备图形界面的操作都离不开显卡(计算机之父)冯·诺依曼体系结构:软件:按其功能应分为:系统软件与应用软件系统软件DOS,Windows,Linux,Unix,Mac,Android,iOS......