随手练——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一顿求的话,会超时( ...
随机推荐
- WebFrom与MVC异同
一.共同点 它们共用一套管道机制. 二.不同点: 1.开发方式: webform开发方式 第一步:前台页面(*.aspx)+后置代码类(*.cs) 第二步:前台页面(*.aspx)+一般处理程序(*h ...
- Hadoop集群动态服役新的数据节点&&退役数据节点
备注:新添的机器为hadoop05,现有hadoop01.hadoop02.hadoop03.hadoop04 环境准备: 1.先克隆一台和集群中一样的机器 2.修改机器ip和主机名称 3.删除原来的 ...
- HDU1815(二分+2-SAT)
Building roads Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Codeforces35E(扫描线)
E. Parade time limit per test:2 seconds memory limit per test:64 megabytes input:input.txt output:ou ...
- js-ES6学习笔记-module(3)
1.如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法. // constants.js 模块 export const A = 1; export const ...
- Django工程的建立以及小网站的编写
这篇博文会详细的介绍如何创建django工程,介绍我如何做了第一个网站.本文基于windows7安装了python2.7.12,Django1.8.18(LTS)版.采用的IDE为pycharm.建议 ...
- H5 canvas 实现飞机大战游戏
首先看几张效果图: 上面三张图分别对应游戏的三种状态 ready,play,pause.体验一下 先介绍一下canvas 画图的原理,在这个游戏中的背景,飞机,子弹以及飞机被击中爆炸的效果都是一张张的 ...
- linux下安装jenkins实现自动化部署
安装 开始 1.安装之前,必须先安装JDK 可以参考 http://www.cnblogs.com/ericli-ericli/p/7070874.html 2.使用相关命令: wget -q -O ...
- iOS设计模式-原型模式
| 导语 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 通过深复制(克隆.拷贝)一个指定类型的对象来创建更多同类型的对象.这个指定的对象可被称为“原型”对象,也就是通过复制原型 ...
- DOS中的ECHO命令详解
1. 作为控制批处理命令在执行时是否显示命令行自身的开关 格式:ECHO [ON|OFF] 如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”. 2. 显示当前ECHO ...