当前位置: 首页 > 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;
}

相关文章:

  • 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
  • 设计模式-(单例,简单工厂,工厂,抽象工厂)
  • 第十届青春文学奖揭晓,梁晓声获特别奖
  • 南京艺术学院博导、雕塑家尹悟铭病逝,年仅45岁
  • 外企聊营商|上海仲裁:化解跨国企业纠纷的“上海路径”
  • 特朗普政府涉税改法案遭众议院预算委员会否决
  • 湖南慈利一村干部用AI生成通知并擅自发布,乡纪委立案
  • 俄乌谈判开始