第 2 章:初出茅庐初级篇 - 2.1 穷竭搜索

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第 2 章:初出茅庐初级篇 - 2.1 穷竭搜索相关的知识,希望对你有一定的参考价值。

201. 部分和问题【爆搜】


https://www.papamelon.com/problem/201

#include<bits/stdc++.h>
using namespace std;
const int N=25;
typedef long long int LL;
LL a[N],st[N],n,m,flag;
void dfs(int sum,int k)

	if(sum==m) flag=1;
	if(k==n) return;
	dfs(sum+a[k],k+1);
	dfs(sum,k+1);

int main(void)

	while(cin>>n)
	
		flag=0;
		for(int i=0;i<n;i++) cin>>a[i];
		cin>>m;
		dfs(0,0);
		if(flag) puts("Yes");
		else puts("No");
	
	return 0;

202. 水洼计数 Lake Counting【连通块】


https://www.papamelon.com/problem/202

#include<bits/stdc++.h>
using namespace std;
const int N=110;
string s[N];
int st[N][N],n,m,cnt;
int dx[8]=-1,-1,-1,0,0,1,1,1;
int dy[8]=-1,0,1,-1,1,-1,0,1;
void dfs(int x,int y)

	st[x][y]++;
	for(int i=0;i<8;i++)
	
		int tempx=x+dx[i];
		int tempy=y+dy[i];
		if(tempx<0||tempx>=n||tempy<0||tempy>=m) continue;
		if(st[tempx][tempy]) continue;
		if(s[tempx][tempy]!='W') continue;
		dfs(tempx,tempy);
	

int main(void)

	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>s[i];
	for(int i=0;i<n;i++)
	
		for(int j=0;j<m;j++)
		
			if(!st[i][j]&&s[i][j]=='W')
			
				dfs(i,j);
				cnt++;
			
		
	
	cout<<cnt<<endl;
	return 0;

203. 迷宫的最短路径【bfs】


https://www.papamelon.com/problem/203

#include<bits/stdc++.h>
using namespace std;
const int N=110;
string s[N];
int st[N][N],n,m;
int stx,sty,edx,edy;
struct nodeint x,y,step;;
int dx[4]=-1,0,0,1;
int dy[4]=0,-1,1,0;
int bfs(int x,int y)

	queue<node>q; q.push(x,y,0);
	st[x][y]=1;
	while(q.size())
	
		auto temp=q.front(); q.pop();
		x=temp.x,y=temp.y;
		int d=temp.step;
		if(x==edx&&y==edy) return d;
		for(int i=0;i<4;i++)
		
			int tempx=x+dx[i];
			int tempy=y+dy[i];
			if(tempx<0||tempx>=n||tempy<0||tempy>=m) continue;
			if(st[tempx][tempy]) continue;
			if(s[tempx][tempy]=='#') continue;
			q.push(tempx,tempy,d+1);
			st[tempx][tempy]=1;
		
	
	return -1;

int main(void) 

	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>s[i];
	for(int i=0;i<n;i++)
	
		for(int j=0;j<m;j++)
		
			if(s[i][j]=='S') stx=i,sty=j;
			if(s[i][j]=='G') edx=i,edy=j;
		
	
	cout<<bfs(stx,sty);
	return 0;

以上是关于第 2 章:初出茅庐初级篇 - 2.1 穷竭搜索的主要内容,如果未能解决你的问题,请参考以下文章

第 2 章:初出茅庐初级篇 - 2.3 动态规划

1.初级篇——最基础的"穷竭搜索”

:初出茅庐初级篇 - 2.2 贪心算法

:初出茅庐初级篇 - 2.3 动态规划

挑战程序设计竞赛 2.1 最基础的“穷竭搜索”

面试高级算法梳理笔记