C++深度搜索(2)

取数游戏

题目描述: 一个 N×M 的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意 两个数字不相邻(若一个数字在另外一个数字相邻 8个格子中的一个即认为这两个数字相 邻),求取出数字和最大是多少。

输入

第一行有两个正整数 N 和 M ,表示了数字矩阵为 N行 M 列。( 1≤N,M≤6)

输出

输出一个整数,代表符合题目要求的最大的数字和。(样例确保数字和在int范围内)

输入复制

3 3

2 8 9

4 6 4

9 10 7

输出复制

27

#include<bits/stdc++.h>
using namespace std;
void func(int,int,int);
int a[10][10]={0};
bool b[10][10]={0};
int n,m;
int ma=-1;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	func(1,1,0);
	cout<<ma;
	
	
	return 0;
}
void func(int x,int y,int sum)
{
	if(x==n&&y==m)
	{
		ma=max(ma,sum);
		return;
	}
	
	int tx=x,ty=y;
	
	y++;
	if(y>m)
	{
		x++;
		y=1;
	}
	
	if(b[x][y]==0)
	{
		b[x][y]=1;
		
		b[x+1][y]=1;
		b[x-1][y]=1;
		b[x][y+1]=1;
		b[x][y-1]=1;
		
		b[x-1][y-1]=1;
		b[x-1][y+1]=1;
		b[x+1][y-1]=1;
		b[x+1][y+1]=1;
		
		func(x,y,sum+a[tx][ty]);
		
		b[x][y]=0;
		
		b[x+1][y]=0;
		b[x-1][y]=0;
		b[x][y+1]=0;
		b[x][y-1]=0;
		
		b[x-1][y-1]=0;
		b[x-1][y+1]=0;
		b[x+1][y-1]=0;
		b[x+1][y+1]=0;
	}
	func(x,y,sum);
}

走出迷宫的最少步数2

题目描述 :当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫 地图,事情就会变得非常简单。假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点 到出口的最短路。

输入

第一行是两个整数n和m(1<=nm<=100)表示迷宫的行数和列数。接下来n行,每行一个长为m的字符串,表示整 个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点 'T'表示出口。

输出

输出从起点到出口最少需要走的步数

输入复制

3 3

S#T

.#.

...

输出复制

6

#include<bits/stdc++.h>
using namespace std;
void func(int,int,int);
int n,m;
char a[110][110];
bool b[110][110]={0};
int sx,sy;
int tx,ty;
int mi=9999999;
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]=='S')
			{
				sx=i;
				sy=j;
			}
			if(a[i][j]=='T')
			{
				tx=i;
				ty=j;
			}
		}
	}
	func(sx,sy,0);
	cout<<mi;
	
	
	return 0;
}
void func(int x,int y,int cnt)
{
	if(x==tx&&y==ty)
	{
		mi=min(mi,cnt);
		return;
	}
	
	if(x+1<n&&a[x+1][y]!='#'&&b[x+1][y]==0)
	{
		b[x+1][y]=1;
		func(x+1,y,cnt+1);
		b[x+1][y]=0;
	}
	if(x-1>=0&&a[x-1][y]!='#'&&b[x-1][y]==0)
	{
		b[x-1][y]=1;
		func(x-1,y,cnt+1);
		b[x-1][y]=0;
	}
	if(y+1<m&&a[x][y+1]!='#'&&b[x][y+1]==0)
	{
		b[x][y+1]=1;
		func(x,y+1,cnt+1);
		b[x][y+1]=0;
	}
	if(y-1>=0&&a[x][y-1]!='#'&&b[x][y-1]==0)
	{
		b[x][y-1]=1;
		func(x,y-1,cnt+1);
		b[x][y-1]=0;
	}
}

小明学游泳

题目描述:小明想要学游泳。 这天,小明来到了游泳池,发现游泳池可以用N行M列的格子来表示,每个格子的面积都是1,且格子内水深相同。 由于小明刚刚入门,他只能在水深相同的地方游泳。为此,他把整个游泳池看成若干片区域,如果两个格子相邻 (上下左右四个方向)且水深相同,他就认为它们属于同一片区域。 小X想知道最大的一片区域面积是多少,希望你帮帮他。

 输入

第一行包含用一个空格隔开的两个整数N,M。(1≤N,M≤100) 接下来N行,每行包含M个 1到9的数字,表示每个格子的水深

输出

第一行包含一个整数,表示最大的一片区域面积。

样例

输入复制

3 3

1 2 4

2 2 4

1 5 2

输出复制

3

#include<bits/stdc++.h>
using namespace std;
void func(int,int,int);
int a[110][110]={0};
bool b[110][110]={0};
int n,m;
int ma=-1;
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			func(i,j,1);
		}
	}
	cout<<ma;
	
	
	return 0;
}
void func(int x,int y,int cnt)
{
	b[x][y]=1;
	if(x+1<n&&a[x+1][y]==a[x][y]&&b[x+1][y]==0)
	{
		func(x+1,y,cnt+1);
	}
	if(x-1<n&&a[x-1][y]==a[x][y]&&b[x-1][y]==0)
	{
		func(x-1,y,cnt+1);
	}
	if(y+1<n&&a[x][y+1]==a[x][y]&&b[x][y+1]==0)
	{
		func(x,y+1,cnt+1);
	}
	if(y-1<n&&a[x][y-1]==a[x][y]&&b[x][y-1]==0)
	{
		func(x,y-1,cnt+1);
	}
	ma=max(ma,cnt);
}

小明学游泳2

题目描述:暑假快到啦,小明准备趁着这个暑假去学游泳。可是一开始小 X 就遇到了一个难题。 游泳池划分成了一个 n×m 的方格, 这里 n×m 表示 n 行 m 列。 因 为游泳池里的水深浅不一,所以这 n×m 个方格对 于小明的危险系数也会不一样。 而小 X 目前需要从左上角 的方格(1, 1)出发, 游到右下角 的方格(n, m),小明每次只 能从当前方格游到上下 左右四个相邻的方格中的某一格,并且在到达终点前不能离开游泳池。 小 X 很担心会发生什么危险,所以希望你能帮他找一条危险系数最小的路径。 一条路径的危险系数定义为这条路径所经过的方格的危险系数之和。 注意:这条路径不能经过同一个方格两次(小 X 当然不希望去那么危险的地方再游一次)

输入

输入数据第一行有两个用空格隔开的正整数 n 和 m, 表示泳池的行数和列数。 接下来共有 n 行数据,每行有 m 个用空格隔开的大于等于 0 的整数, 表示每个方格 的危险系数

输出

输出仅有一行包含一个整数ans, 表示要求的从左上角的方格( 1, 1)出发, 游到 右下角的方格(n, m) 的最小的危险系数。

输入复制

4 5

1 7 2 8 2

3 10 1 5 1

2 8 3 7 1

1 2 1 20 1

输出复制

19

#include<bits/stdc++.h>
using namespace std;
void func(int,int,int);
int a[110][110]={0};
bool b[110][110]={0};
int n,m;
int mi=999999;
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	func(0,0,0);
	cout<<mi;
	
	
	return 0;
}
void func(int x,int y,int sum)
{
	b[x][y]=1;
	if(x==n-1&&y==m-1)
	{
		sum=sum+a[x][y];
		mi=min(mi,sum);
		b[x][y]=0;
		return;
	}
	if(x+1<=n-1&&b[x+1][y]==0)
	{
		func(x+1,y,sum+a[x][y]);
	}
	if(x-1>=0&&b[x-1][y]==0)
	{
		func(x-1,y,sum+a[x][y]);
	}
	if(y+1<=m-1&&b[x][y+1]==0)
	{
		func(x,y+1,sum+a[x][y]);
	}
	if(y-1>=0&&b[x][y-1]==0)
	{
		func(x,y-1,sum+a[x][y]);
	}
	b[x][y]=0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/917890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十分钟学会html超文本标记语言

前言 本次学习的是在b站up主泷羽sec课程有感而发&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 &#xff01;&#xff01;…

【Linux系统编程】第四十七弹---深入探索:POSIX信号量与基于环形队列的生产消费模型实现

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、POSIX信号量 2、基于环形队列的生产消费模型 2.1、代码实现 2.1.1、RingQueue基本结构 2.1.2、PV操作 2.1.3、构造析构…

除了 TON, 哪些公链在争夺 Telegram 用户?数据表现如何?

作者&#xff1a;Stella L (stellafootprint.network) 在 2024 年&#xff0c;区块链游戏大规模采用迎来了一个意想不到的催化剂&#xff1a;Telegram。随着各大公链争相布局这个拥有海量用户基础的即时通讯平台&#xff0c;一个核心问题浮出水面&#xff1a;这种用户获取策略…

小白进!QMK 键盘新手入门指南

经常玩键盘的伙伴应该都知道&#xff0c;现在的键盘市场可谓是百花齐放&#xff0c;已经不是之前的单一功能产品化时代。我们可以看到很多诸如&#xff1a;机械轴键盘、磁轴键盘、光轴键盘、电感轴键盘&#xff0c;以及可能会上市的光磁轴键盘&#xff0c;更有支持屏幕的、带旋…

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(二)

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

《Markdown语法入门》

文章目录 《Markdown语法入门》1.标题2.段落2.1 换行2.2分割线 3.文字显示3.1 字体3.2 上下标 4. 列表4.1无序列表4.2 有序列表4.3 任务列表 5. 区块显示6. 代码显示6.1 行内代码6.2 代码块 7.插入超链接8.插入图片9. 插入表格 《Markdown语法入门》 【Typora 教程】手把手教你…

北京大学c++程序设计听课笔记101

基本概念 程序运行期间&#xff0c;每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址&#xff08;也称“入口地址”&#xff09;。我们可以将函数的入口地址赋给一个指针变量&#xff0c;使该指针变量指向该函数。然后通过指针变量就可以调用这个…

C++:boost库安装

官网&#xff1a;https://www.boost.org/ Boost 库在 C 社区中广受欢迎&#xff0c;主要因为它提供了丰富、强大且稳定的功能&#xff0c;可以显著提高开发效率和代码质量。下面是使用 Boost 库的主要优势和特点&#xff1a; 1. 丰富的功能集合 Boost 提供了数十个高质量的 …

VScode学习前端-01

小问题合集&#xff1a; vscode按&#xff01;有时候没反应&#xff0c;有时候出来&#xff0c;是因为------>必须在英文状态下输入&#xff01; 把鼠标放在函数、变量等上面&#xff0c;会自动弹出提示&#xff0c;但挡住视线&#xff0c;有点不习惯。 打开file->pre…

机房动环境监控用各种列表已经淘汰了,现在都是可视化图表展示了

在信息技术飞速发展的今天&#xff0c;机房作为数据存储、处理和传输的核心场所&#xff0c;其稳定运行至关重要。过去&#xff0c;机房动环境监控主要依赖各种列表形式来呈现数据&#xff0c;但如今&#xff0c;这种方式已经逐渐被淘汰&#xff0c;取而代之的是更加直观、高效…

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程&#xff08;10&#xff09;&#xff1a;配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…

【软件测试】自动化常用函数

文章目录 元素的定位cssSelectorxpath查找元素 操作测试对象点击/提交对象——click()模拟按键输入——sendKeys(“”)清除文本内容——clear()获取文本信息——getText()获取页面标题和 URL 窗口设置窗口大小切换窗口关闭窗口 等待强制等待隐式等待显式等待 浏览器导航 元素的…

CC4学习记录

&#x1f338; CC4 CC4要求的commons-collections的版本是4.0的大版本。 其实后半条链是和cc3一样的&#xff0c;但是前面由于commons-collections进行了大的升级&#xff0c;所以出现了新的前半段链子。 配置文件&#xff1a; <dependency><groupId>org.apach…

【linux】网络基础 ---- 数据链路层

用于两个设备(同一种数据链路节点)之间进行传递 数据链路层解决的问题是&#xff1a;直接相连的主机之间&#xff0c;进行数据交付 1. 认识以太网 "以太网" 不是一种具体的网络, 而是一种技术标准&#xff1a; 既包含了数据链路层的内容, 也包含了一些物理层的内容…

5. ARM_指令集

概述 分类 汇编中的符号&#xff1a; 指令&#xff1a;能够编译生成一条32位机器码&#xff0c;并且能被处理器识别和执行伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若干条指令伪操作&#xff1a;不会生成指令&#xff0c;只是在编译阶段告诉编译器怎…

小程序租赁系统开发为企业提供高效便捷的租赁服务解决方案

内容概要 在这个数字化飞速发展的时代&#xff0c;小程序租赁系统应运而生&#xff0c;成为企业管理租赁业务的一种新选择。随着移动互联网的普及&#xff0c;越来越多的企业开始关注如何利用小程序来提高租赁服务的效率和便捷性。小程序不仅可以为用户提供一个快速、易用的平…

计算机组成原理——高速缓存

标记表示——主存块号和缓存块之前的一一对应关系

赛元免费开发板申请

在作者网上冲浪的时候&#xff0c;突然发现了一个国内的良心企业&#xff0c;虽然现在不是很有名&#xff0c;但是他现在是有一个样品申请的活动&#xff0c;他就是国内的Redfine新定义&#xff0c;他申请的板子是用的赛元MCU&#xff0c;作者本着有板子就要申请的原则&#xf…

Ubuntu 的 ROS 操作系统 turtlebot3 SLAM仿真

引言 SLAM&#xff08;同步定位与地图构建&#xff09;在Gazebo仿真环境中的应用能够模拟真实机器人进行环境建图和导航。通过SLAM仿真&#xff0c;开发者可以在虚拟环境中测试算法&#xff0c;而不必依赖真实硬件&#xff0c;便于调试与优化。 Gazebo提供了多个虚拟环境&…

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台&#xff1a;Unity 6.0 编程语言&#xff1a;CSharp 编程平台&#xff1a;Visual Studio 2022   一、问题背景 | 开发库存系统 图1 位置同步失败问题 图2 位置正常同步效果表现 黑框 作用于 UnityEngine.UI.GridLayoutGruop&#xff0c;形成 4x6 布局&#xff0c;如…