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

2.24DFS和BFS刷题

洛谷P2895:用BFS走出危险区域,危险区域存在时间,我们用ma记录最快变成危险区域的时间, 然后每次枚举时间+1然后跟ma数组比较看能不能走,然后时间复杂度为O(305^2)。

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 50010;
int m, x, y, t;
typedef pair<int, int>PII;
int ma[305][305], ans[305][305];
bool v[305][305];
int dx[5] = {1, -1, 0, 0, 0},dy[5] = {0, 0, 1, -1, 0};
int change(int x){
	if(x == -1)return 99999;
	return x;
}
int main(){
	cin >> m;
	memset(ma, -1, sizeof(ma));
	while(m--){
		cin >> x >> y >> t;
		for(int i = 0; i < 5; i++){
			if(x + dx[i] >= 0 && y + dy[i] >= 0 && (ma[x + dx[i]][y + dy[i]] == -1 || ma[x + dx[i]][y + dy[i]] > t)){
				ma[x + dx[i]][y + dy[i]] = t;
			}
		}
	}
	queue<PII> q;
	q.push({0, 0});
	v[0][0] = true;
	while(q.size()){
		auto t = q.front();
		q.pop();
		int xd = t.first, yd = t.second;
		int s = ans[xd][yd] + 1;
		if(ma[xd][yd] == -1){
			cout << s - 1 << endl;
			return 0;
		}
		for(int i = 0; i < 4; i++){
			int xx = xd + dx[i], yy = yd + dy[i];
			if(xx >= 0 && yy >= 0 && s < change(ma[xx][yy]) && !v[xx][yy]){
				v[xx][yy] = true;
				ans[xx][yy] = s;
				q.push({xx, yy});
			}
		}
	}
	cout << -1 << endl;
	
	return 0;
}

洛谷P2036

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n, ss = 1, bb;
int s[15], b[15];
bool flag[15];
int ans = 0x7ffffff;
void dfs(int x){
	if(x > n){
		
	}
	else{
		for(int i = 1; i <= n; i++){
			if(flag[i] == false){
				ss *= s[i], bb += b[i];
				flag[i] = true;
				ans = min(ans, abs(ss - bb));
				dfs(x + 1);
				ss /= s[i], bb -= b[i];
				flag[i] = false;
			}
		}
	}
}
int main(){
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> s[i] >> b[i];
	}
	dfs(1);
	cout << ans << endl;
	
	return 0;
}

洛谷P1605迷宫

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n, m, t;
const int N = 15;
int sx, sy, fx, fy, xd, yd;
bool za[N][N], st[N][N];
int ans;
int dx[4] = {0, 0, 1, -1}, dy[4] = {1, -1, 0, 0};
void dfs(int x, int y){
	if(x == fx && y == fy){
		ans++;
		return;
	}
	for(int i = 0; i < 4; i++){
		int xx = x + dx[i], yy = y + dy[i];
		if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && !za[xx][yy] && !st[xx][yy]){
			st[xx][yy] = true;
			dfs(xx, yy);
			st[xx][yy] = false;
		}
	}
}
int main(){
	cin >> n >> m >> t;
	cin >> sx >> sy >> fx >> fy;
	st[sx][sy] = true;//注意特殊点 
	while(t--){
		cin >> xd >> yd;
		za[xd][yd] = true;
	}
	dfs(sx, sy);
	cout << ans << endl;
	
	return 0;
}

http://www.dtcms.com/a/35565.html

相关文章:

  • krpano 实现全景视频展示
  • Day55-【软考】-2022年下半年软考软件设计师综合知识真题-计算机专业英语
  • Python NumPy库使用指南:从入门到精通
  • 调查报告:DLL项目运行时库设置与依赖兼容性分析
  • C++ 继承与运算符重载的简单练习
  • LabVIEW不规则正弦波波峰波谷检测
  • 网站快速收录:如何优化网站图片Alt标签?
  • javascript实现二进制、十进制、十六进制和八进制之间的相互转换
  • 短剧小程序系统源码
  • 大模型做导师之开源项目学习(lightRAG)
  • 当G1机器人跳出“丝滑舞步“:算力+AI 催生具身智能
  • Entity Framework Core开发采用Repository与DbContext优势和劣势,及开发的方便与快速
  • 在虾分发平台上将h5页面打包成app
  • 基于springboot的学习社区博客
  • 关于uniapp使用renderJS中调用父类方法和参数的使用
  • dubbo转http方式调用
  • 爱普生SG-8101CE可编程晶振赋能智能手机的精准心脏
  • 6.3 - UART串口数据发送之中断
  • MessageAuthenticator
  • 设计模式-(单例,简单工厂,工厂,抽象工厂)
  • 【组态PLC】基于三菱西门子S7-200PLC和组态王自动洗衣机组态设计【含PLC组态源码 M012期】
  • [创业之路-326]:两种事业部授权模式:战略管控与运营管控
  • 数位dp-
  • el-select滚动获取下拉数据;el-select滚动加载
  • 【信息系统项目管理师-案例真题】2011上半年案例分析答案和详解
  • 使用python接入腾讯云DeepSeek
  • 数据类型转换
  • 项目范围管理--从规划到控制项目范围的核心思想
  • 多弹协同末制导律设计
  • C++与Python实现LiDAR点云投影对比:关键差异与易错点详解