深搜复习(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);
	
}
相关推荐
csdnzzt12 分钟前
从内存角度透视现代C++关键特性
c++
jie1889457586639 分钟前
C++ 中的 const 知识点详解,c++和c语言区别
java·c语言·c++
明月*清风1 小时前
c++ —— 内存管理
开发语言·c++
WindSearcher1 小时前
大模型微调相关知识
后端·算法
取酒鱼食--【余九】1 小时前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar
西北大程序猿2 小时前
单例模式与锁(死锁)
linux·开发语言·c++·单例模式
彩妙不是菜喵2 小时前
算术操作符与类型转换:从基础到精通
c语言
qq_454175792 小时前
c++学习-this指针
开发语言·c++·学习
Magnum Lehar3 小时前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
水蓝烟雨3 小时前
[面试精选] 0094. 二叉树的中序遍历
算法·面试精选