2018第九届蓝桥杯B组决赛(国赛)第.二,九题(DFS)题解:激光样式,全球变暖

 插一句 :第一题  :直接拿笔算就可以的,没啥技术含量

 

第二题 :观察发现这其实就是一个fib数列(看其他代码 好高大上,还要用DFS 我来个简单的)

#include<bits/stdc++.h>
int main()
{
	long long c,a,b;
	a=2;
	b=3;
	for(int i=3;i<31;++i){
		c=a+b;
		a=b;
		b=c;
	}
	printf("%lld\n",c);
 } 

 第九题 我用的是DFS

#include<bits/stdc++.h>
#define MAX 1010
char mp[MAX][MAX];
int vis[MAX][MAX];
int n,cou;
int dir[4][2]={1,0,0,1,-1,0,0,-1};//右 下  左 上 

bool in(int x,int y)
{
	if(x>=n || x<0 || y>=n || y<0 )
	return false;
	return true;
}

void dfs(int x,int y)
{
	vis[x][y]=1;
	for(int i=0;i<4;++i)
	{
		int nx = x+ dir[i][0];
		int ny = y+dir[i][1];
		if(in(nx,ny) && !vis[nx][ny])
		{
			vis[nx][ny]=1;
			
			if(mp[nx][ny]=='#'&&mp[nx+1][ny]=='#' && mp[nx-1][ny]=='#'&&mp[nx][ny-1]=='#'&&mp[nx][ny+1]=='#')
			cou++;
			dfs(nx,ny);
		}
	} 
	
 } 

int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;++i)
	    scanf("%s",mp[i]);

	memset(vis,0,sizeof(vis));	
	cou=0;
	dfs(0,0);//z注意这两条语句顺序不能错 要么cou输出一直是0
	
	printf("%d",cou);	
		
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/intmain_S/article/details/89228700