当前位置: 首页 > article >正文

【搜索】P3654 First Step (ファーストステップ)

难度:普及-

算法:dfs

思路:

坑点:当 k == 1 时,需要除以2,因为向右向下搜索了两遍。

横着竖着都可以,因此搜索的时候按两种方向进行搜索;

如何不重复的搜索呢?

 把每一个合法的点(空地)都搜索一遍,从右方向搜索一遍,再从左方向搜索一遍。

因为我们要连续的一块地因此搜索的时候只能一个方向搜到底。

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl '\n'

const int N = 110;

int n,m,k;
char mp[N][N];
int dx[2] = {0,1}, dy[2] = {1,0};  //偏移量向下、向右  
int ans;


//x表示横坐标,y表示纵坐标 
//u表示方向的坐标
//v表示 次数 
void dfs(int x,int y,int i,int u){
     if(u > k) {   
     	ans ++;
     	return;
	 } 
	 //判断不可行的情况
	 if(mp[x][y] == '#' || x < 0 || y < 0 || x >= n ||y >= m) return; 
	 
	 dfs(x + dx[i],y + dy[i],i,u + 1);
	 return;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n >> m >> k;
	for(int i = 0; i < n; i++){
		cin >> mp[i];
	}
	
	for(int i = 0; i < n ; i++){
		for(int j = 0; j < m; j++){
			if(mp[i][j] == '.'){
				//为什么循环两次?因为可以向下向右两个方向进行搜索 
				for(int p = 0; p < 2; p ++){
				    dfs(i,j,p,1);  //为什么是 1 ,因为当前我脚下的是一片空地 
				}
			}
		}
	}
	if(k == 1){
		ans /= 2;   //如果 k = 1是需要除以2,因为我们向右,向下搜索了两遍 
	}
    cout << ans << endl;
	return 0;
} 


http://www.kler.cn/a/574424.html

相关文章:

  • transformer架构解析{掩码,(自)注意力机制,多头(自)注意力机制}(含代码)-3
  • 个人博客自动化测试报告
  • Rust语言基础知识详解【七】
  • 自然语言处理:k均值聚类算法
  • nodejs去除本地文件html字符
  • 数据结构拓展:详解realloc(C++)
  • 【RabbitMQ】Spring Boot 结合 RabbitMQ 完成应用间的通信
  • HCIA-IP路由动态-RIP
  • 计算机网络笔记(一)——1.1计算机网络在信息时代中的作用
  • SpringBoot集成Sentry日志收集-1 (Sentry安装)
  • 论文粗读——Isometric 3D Adversarial Examples in the Physical World
  • Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
  • Linux网络环境配置及常用命令
  • JavaScript 基础语法
  • 【区块链 + 绿色低碳】东方易电城市微电网智能平台 | FISCO BCOS 应用案例
  • C++ 单词识别_牛客题霸_牛客网
  • flink重启策略
  • JMeter 断言最佳实践
  • plt和cv2有不同的图像表示方式和颜色通道顺序
  • pytorch3d学习(一)——开始(架构概述、输入数据、相机坐标系、纹理渲染)