随手练——P1141 01迷宫


1、暴力版
本质上就是求连通块数量,那么DFS或者BFS都行,暴力跑。
写完发现题目比较特殊,m次提问,那每次都暴力搜,肯定是要跑死了。
#include <iostream>
#include <string.h>
#include <stdio.h> int cnt,n;
int dir[][] = { {,},{-,},{,},{,-} };
bool fuck[][];
char s[][]; void dfs(int x, int y) {
for (int k = ; k < ; k++) {
int tox = x + dir[k][], toy = y + dir[k][];
if (!fuck[tox][toy] && s[x][y] != s[tox][toy] && (tox >= && tox < n && toy >= && toy < n)) {
cnt++;
fuck[tox][toy] = true;
dfs(tox, toy);
}
}
}
int main()
{
int t;
scanf("%d%d", &n, &t);
for (int i = ; i < n; i++)scanf("%s", s[i]); int i, j;
while (t--) {
int c1, c2;
memset(fuck, , sizeof(fuck));
cnt = ;
scanf("%d%d",&c1,&c2);
fuck[c1 - ][c2 - ] = true;
dfs(c1 - , c2 - );
printf("%d\n", cnt);
}
return ;
}
2、改进版
要确定:每个联通区域的答案是一样的,就好办了。
核心代码:
void dfs(int x, int y,int d) {
for (int k = ; k < ; k++) {
int tox = x + dir[k][], toy = y + dir[k][];
if (!fuck[tox][toy] && s[x][y] != s[tox][toy] && (tox >= && tox < n && toy >= && toy < n)) {
cnt++;
fuck[tox][toy] = d;
dfs(tox, toy, d);
}
}
}
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
if (!fuck[i][j]) {
fuck[i][j] = d;//d表示第几个连通区域
cnt = ;
dfs(i, j, d);
ans[d++] = cnt;
}
}
}
算是比较特殊的一种打表吧。
#include <iostream>
#include <string.h>
#include <stdio.h> int cnt,n;
int dir[][] = { {,},{-,},{,},{,-} };
int fuck[][];
int ans[];
char s[][]; void dfs(int x, int y,int d) {
for (int k = ; k < ; k++) {
int tox = x + dir[k][], toy = y + dir[k][];
if (!fuck[tox][toy] && s[x][y] != s[tox][toy] && (tox >= && tox < n && toy >= && toy < n)) {
cnt++;
fuck[tox][toy] = d;
dfs(tox, toy, d);
}
}
}
int main()
{
int t;
scanf("%d%d", &n, &t);
for (int i = ; i < n; i++)scanf("%s", s[i]); int i, j, d = ;
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
if (!fuck[i][j]) {
fuck[i][j] = d;
cnt = ;
dfs(i, j, d);
ans[d++] = cnt;
}
}
} while (t--) {
int c1, c2;
scanf("%d%d",&c1,&c2);
printf("%d\n", ans[fuck[c1 - ][c2 - ]]);
}
return ;
}
随手练——P1141 01迷宫的更多相关文章
- 洛谷——P1141 01迷宫
P1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任 ...
- luogu P1141 01迷宫 x
P1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任 ...
- P1141 01迷宫
https://www.luogu.org/problemnew/show/P1141 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样 ...
- 洛谷P1141 01迷宫
题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...
- P1141 01迷宫 dfs连通块
题目描述 有一个仅由数字000与111组成的n×nn \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻444格中的某一格111上,同样若你位于一格1上,那么你可以移动到相邻444格 ...
- P1141 01迷宫 DFS (用并查集优化)
题目描述 有一个仅由数字00与11组成的n \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上 ...
- 洛谷P1141 01迷宫【DFS】
有一个仅由数字00与11组成的n \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上. 你的任 ...
- P1141 01迷宫(连通块模板)
题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...
- 洛谷 P1141 01迷宫
看似普通的 bfs 题(实际上也不怎么难 主要是我太菜了) 题目链接:https://www.luogu.org/problemnew/show/P1141 如果直接用简单的bfs一顿求的话,会超时( ...
随机推荐
- async和await学习笔记
结论: (1)asyc方法的返回类型必须为:void.Task或者Task<T>.返回类型为Task的异步方法中无需使用return返回值,而返回类型为Task<TResult> ...
- Java JDBC的基础知识(三)
在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...
- 批量导出VBA工程中的Source
在做Excel宏相关项目的开发和维护过程中,我们经常需要导出VBA中的Source,但是Excel提供的宏编辑器中只能一个文件一个文件地导出,很不方便. 下面介绍2种批量导出的方法: 1.Source ...
- Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
目录 引言 构建示例 match operator 参数 analyzer lenient 参数 Fuzziness fuzzniess 参数 什么是模糊搜索? Levenshtein Edit Di ...
- 线程基础的一些理解(一)(java)
一.多线程的基本概念 线程是指进程中的一个执行场景,也就是执行流程,所以我们首先要聊一聊进程,以及进程和线程的关系 1.什么是进程? 一个进程对应一个应用程序,就像我们在windows系统中启动Wo ...
- HDU1257(dp)
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 关于latex编译中文不显示问题的解决方法。
我的编译环境是texlive2018 + texstudio 配置如图 默认编码格式为utf8 直接上代码 %\documentclass{article} %\usepackage{xeCJK} \ ...
- js-ES6学习笔记-Proxy
1.Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. 2.Proxy 可以理解成,在目标对象之前架设 ...
- Git 及 GitHub 使用
Git bash 的常用命令 1. pwd 查看当前所在目录 2. cd cd .. 返回上一级 cd 目录 进入对应的目录 3. ls 查看当前文件夹的内容 ...
- Python 基于python实现的http接口自动化测试框架(含源码)
基于python实现的http+json协议接口自动化测试框架(含源码) by:授客 QQ:1033553122 欢迎加入软件性能测试交流 QQ群:7156436 由于篇幅问题,采用百度网 ...