深搜复习(c++)

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

走出迷宫的最少步数2
题目描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
输入
第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点'T'表示出口。
输出
输出从起点到出口最少需要走的步数。
样例
输入复制
3 3
S#T
.#.
...
输出复制
6

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
char a[110][110];
bool b[110][110] = {0};
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int n,m;
int xx,yy;
int mi = 999999;

void aaa(int,int,int);
int main()
{
	cin>>n>>m;
	int x,y;
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]=='S')
			{
				x = i;
				y = j;
			}
			else if(a[i][j]=='T')
			{
				xx = i;
				yy = j;
			}
		}
	}
	
	aaa(x,y,0);
	cout<<mi;
	return 0;
}
void aaa(int x,int y,int cnt)
{
	
	if(x==xx&&y==yy)
	{
		mi = min(mi,cnt);
		return;
	}
	
	for(int i = 0;i<4;i++)
	{
		int tx = x+dx[i];
		int ty = y+dy[i];
		if(tx>=0&&ty>=0&&tx<n&&ty<m&&a[tx][ty]!='#'&&b[tx][ty]==0)
		{
			b[tx][ty] = 1;
			aaa(tx,ty,cnt+1);
			
			b[tx][ty] = 0;
		}
	}
	
	return;
}
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
char a[11][11];
bool b[11][11] = {0};
int dx[4] = {-2,-1,1,2};
int dy[4] = {1,2,2,1};
int n,m;
int xx,yy;
int mi = 999999;
int cx[110];
int cy[110];
int cntt;

void aaa(int,int,int);
int main()
{
	int x,y;
	n = 5;
	m = 9;
	x = 4;
	y = 0;
	xx = 0;
	yy = 8;
	
	aaa(x,y,0);
	
	return 0;
}
void aaa(int x,int y,int cnt)
{
	cx[cnt] = x;
	cy[cnt] = y;
	if(x==xx&&y==yy)
	{
		cntt++;
		cout<<cntt<<":";
		for(int i = 0;i<cnt;i++)
		{
			cout<<4-cx[i]<<","<<cy[i]<<"->";
		}
		cout<<4-cx[cnt]<<","<<cy[cnt]<<endl;
		return;
	}
	
	for(int i = 0;i<4;i++)
	{
		int tx = x+dx[i];
		int ty = y+dy[i];
		if(tx>=0&&ty>=0&&tx<n&&ty<m&&b[tx][ty]==0)
		{                          
			b[tx][ty] = 1;
			aaa(tx,ty,cnt+1);
			
			b[tx][ty] = 0;
		}
	}
	
	return;
}

小明学游泳
小明想要学游泳。
这天,小明来到了游泳池,发现游泳池可以用N行M列的格子来表示,每个格子的面积都是1,且格子内水深相同。由于小明刚刚入门,他只能在水深相同的地方游泳。为此,他把整个游泳池看成若干片区域,如果两个格子相邻(上下左右四个方向)且水深相同,他就认为它们属于同一片区域.小X想知道最大的一片区域面积是多少,希望你帮帮他。
输入
第一行包含用一个空格隔开的两个整数N,M。(1≤N,M≤100)接下来N行,每行包含M个 1到9的数字,表示每个格子的水深
输出
第一行包含一个整数,表示最大的一片区域面积。
样例
输入复制1
3 3
1 2 4
2 2 4
1 5 2
输出复制1
3
输入复制2
10 10

1 2 4 4 8 3 6 9 3 8

2 2 4 2 4 6 9 9 5 2

3 5 6 9 9 9 3 5 7 3

1 3 6 9 9 4 2 4 8 3

1 3 7 9 2 4 7 2 7 1

5 7 9 3 1 1 7 9 4 2

4 6 9 7 2 1 3 6 9 4

2 3 6 1 1 1 4 8 8 3

1 4 9 1 1 6 8 8 2 3

1 5 2 3 6 5 4 1 5 8
输出复制2
8

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int a[110][110];
bool b[110][110] = {0};
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int n,m;
int sum = 0;
int aa;
void aaa(int,int,int);
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++)
		{
			aa = a[i][j];
			aaa(i,j,0);
		}
	}
	cout<<sum;
	return 0;
}
void aaa(int x,int y,int cnt)
{
	sum = max(sum,cnt);
	for(int i = 0;i<4;i++)
	{
		int tx = x+dx[i];
		int ty = y+dy[i];
		if(tx>=0&&ty>=0&&tx<n&&ty<m&&a[tx][ty]==aa&&b[tx][ty]==0)
		{                          
			b[tx][ty] = 1;
			aaa(tx,ty,cnt+1);
			
			b[tx][ty] = 0;
		}
	}
	
	return;
}
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int a[110][110];
bool b[110][110] = {0};
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int n,m;
int sum = 999999;

void aaa(int,int,int);
int main()
{
	
	cin>>n>>m;
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	
	aaa(0,0,a[0][0]);
	
	cout<<sum;
	return 0;
}
void aaa(int x,int y,int cnt)
{
	
	if(x==n-1&&y==m-1)
	{
		sum = min(sum,cnt);
	}
	for(int i = 0;i<4;i++)
	{
		int tx = x+dx[i];
		int ty = y+dy[i];
		if(tx>=0&&ty>=0&&tx<n&&ty<m&&b[tx][ty]==0)
		{                          
			b[tx][ty] = 1;
			aaa(tx,ty,cnt+a[tx][ty]);
			
			b[tx][ty] = 0;
		}
	}
	
	return;
}
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
	char a[2];
	bool b = false;
};
node aa[60];
int n;

int ma = -999999999;
void aaa(int,int);
int main()
{
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>aa[i].a[0]>>aa[i].a[1];
	}
	
	for(int i = 0;i<n;i++)
	{
		aaa(i,1);
	}
	cout<<ma;
	return 0;
}
void aaa(int ii,int cnt)
{
	ma = max(ma,cnt);
	for(int i = 0;i<n;i++)
	{
		if(ii!=i&&aa[i].a[0]==aa[ii].a[1]&&aa[i].b==false)
		{
			aa[i].b = true;
			aaa(i,cnt+1);
			aa[i].b = false;
		}
	}
	
	return;
}
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int a[25];
int n,m;
int b[25];
int c[25];

void aaa(int,int);
int main()
{
	cin>>n>>m;
	
	
	aaa(0,0);
	
	return 0;
}
void aaa(int ii,int k)
{
	if(k==m)
	{
		for(int i = 0;i<k;i++)
		{
			cout<<c[i]<<" ";
		}
		cout<<endl;
		return;
	}
	
	for(int i = ii+1;i<=n;i++)
	{
		if(b[i]==0)
		{
			b[i] = 1;
			c[k] = i;
			aaa(i,k+1);
			b[i] = 0;
		}
	}
	
	return;
}
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;


int n,m;
int c[110];

void aaa(int,int,int);
int main()
{
	cin>>n;
	
	
	aaa(0,1,0);
	
	return 0;
}
void aaa(int aa,int ii,int k)
{
	if(aa==n)
	{
		if(c[0]!=n)
		{
			cout<<n<<"=";
			for(int i = 0;i<k-1;i++)
			{
				cout<<c[i]<<"+";
			}
			cout<<c[k-1]<<endl;
		}
		
		return;
	}
	
	for(int i = ii;i<=n;i++)
	{
		if(aa+i<=n)
		{
			c[k] = i;
			aaa(aa+i,i,k+1);
		}
		else
		{
			break;
		}
	}
	
	return;
}
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int n,m;
int aaa(int,int);
int main()
{
	int t;
	cin>>t;
	for(int i = 0;i<t;i++)
	{
		cin>>m>>n;
		cout<<aaa(m,n)<<endl;
	}
	
	
	return 0;
}
int aaa(int mm,int nn)
{
	if(mm==1||nn==1||mm==0||nn==0) return 1;
	if(mm<0) return 0;
	if(mm<nn) return mm;
	return aaa(mm-nn,nn)+aaa(mm,nn-1);
	
}
相关推荐
轩辰~5 分钟前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
lxyzcm25 分钟前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
蜀黍@猿43 分钟前
C/C++基础错题归纳
c++
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统笔记——曝光过滤 & Bloom Filter
算法·推荐算法
qystca1 小时前
洛谷 P1706 全排列问题 C语言
算法
浊酒南街1 小时前
决策树(理论知识1)
算法·决策树·机器学习
雨中rain1 小时前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
就爱学编程1 小时前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
学术头条1 小时前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
Schwertlilien2 小时前
图像处理-Ch4-频率域处理
算法