瓷砖

044 红与黑 蘑菇阵

不羁岁月 提交于 2019-12-04 05:17:34
红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的(上下左右四个方向)黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入描述:输入包含多组数据。每组数据第一行是两个整数 m 和 n(1≤m, n≤20)。紧接着 m 行,每行包括 n 个字符。每个字符表示一块瓷砖的颜色,规则如下: “.”:黑色的瓷砖; “#”:白色的瓷砖; “@”:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 输出描述: 对应每组数据,输出总共能够到达多少块黑色的瓷砖。 输入 输出:45 解题思路 :下图就是这道题的原型,灰色的也代表黑色,是人物站立的地方,所求的结果是黑色方块连接的块数一共是多少个? 采用的是深度优先搜索方法 # include <iostream> # include <stdlib.h> # include <string> # include <vector> # include <math.h> # include <queue> # include <fstream> using namespace std ; class pos { public : int x ; int y ; } ; int bfs ( vector < vector < char >> & map ,

Bailian2816 红与黑【DFS】

ぃ、小莉子 提交于 2019-12-04 05:17:21
2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 输出 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 样例输入 6 9 …#. …# … … … … … #@…# .#…#. 0 0 样例输出 45 来源 1979 问题链接 : Bailian2816 红与黑 问题描述 :(略) 问题分析 : 这是一个可以用DFS解决的问题,不解释了。 程序说明 : 本题与参考链接是同一题,使用参考链接的程序提交就AC了。 参考链接 : POJ1979 HDU1312 ZOJ2165 Red and Black【DFS】 题记 :朋友交多了,容易遇见熟人。 AC的C语言程序(递归DFS)如下:

红与黑(信息学奥赛一本通-T1216)

ε祈祈猫儿з 提交于 2019-12-04 05:17:00
【题目描述】 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 【输入】 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下: 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 【输出】 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 【输入样例】 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 【输出样例】 45 【源程序】 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #define N 1001 using namespace std; int m,n; char ch; int maps[N][N]; int vis[N][N]; int dir[4][2]={{0

2816:红与黑

旧城冷巷雨未停 提交于 2019-12-04 05:16:41
2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 输出 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 样例输入 6 9 .... #. ..... # ...... ...... ...... ...... ...... #@... # . #.. #. 0 0 样例输出 45 #include<iostream> using namespace std ; //http://bailian.openjudge.cn/practice/2816/ //最正常的dfs了,类似于挑战程序设计里面的那个 int w,h,sx,sy,res; int dx[]={ 1 , 0 ,- 1

OpenJudge--红与黑

不问归期 提交于 2019-12-04 05:16:25
红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 输出 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 样例输入 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 样例输出 45 思路:对找到的@进行标记位置,即初始位置,然后对其进行上下左右的深度搜索,搜索过程注意不要越过行列范围,代码如下: #include<stdio.h> #include<string.h> int W,H; int sum;//记录能够走的的数目 char s[20][20]; int a[20][20];//标记数组

搜索之红与黑

爷,独闯天下 提交于 2019-12-04 05:10:34
1818:红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 输出 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 样例输入 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 样例输出 45 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> using namespace std; bool a[22][22]; char b[22][22],c[22]; int w,h; int s; void dfs(int x,int y) {

【NOI OJ】1818 红与黑

ぃ、小莉子 提交于 2019-12-04 05:10:02
1818:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 输出 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 样例输入 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 样例输出 45 来源 1979 #--------------------------------------------------------------------------------# 还是一道DFS的深搜题,主体思路: 找到“@”后,进入函数,上下左右搜索,if(跑出数组||撞墙)便return 递归一次便sum+

C++搜索与回溯算法之红与黑

浪尽此生 提交于 2019-12-04 05:09:53
红与黑 Description 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 Input 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 Output 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 Sample Input 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 Sample Output 45 这道题我做了很久,主要原因就是卡在输入上了,后来才发现: 它是输入x轴、y轴(即先输入列数,后输入行数)! 它是输入x轴、y轴(即先输入列数,后输入行数)! 它是输入x轴、y轴(即先输入列数,后输入行数)! 重要的事情说三遍。 代码如下: #include<cstdio> #include<cstring>

2806 红与黑

▼魔方 西西 提交于 2019-12-04 05:09:29
题目描述 Description 有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数。 输入描述 Input Description 输入包含多个数据集。一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20. 每个数据集有H行,其中每行包含W个字符。每个字符的含义如下所示: '.'——黑砖 '#'——红砖 '@'——男子(每个数据集仅出现一次) 两个0表示输入结束。 输出描述 Output Description 对每个数据集,程序应该输出一行,包含男子从初始瓷砖出发可到达的瓷砖数。 样例输入 Sample Input 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..

磁砖样式

匿名 (未验证) 提交于 2019-12-03 00:19:01
小明家的一面装饰墙原来是 3*10 的小方格。 现在手头有一批刚好能盖住2个小方格的长方形瓷砖。 瓷砖只有两种颜色:黄色和橙色。 小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。 小明有个小小的强迫症:忍受不了任何2*2的小格子是同一种颜色。 (瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑组合图案,请忽略瓷砖的拼缝) 显然,对于 2*3 个小格子来说,口算都可以知道:一共10种贴法,如【p1.png所示】 但对于 3*10 的格子呢?肯定是个不小的数目,请你利用计算机的威力算出该数字。 注意:你需要提交的是一个整数,不要填写任何多余的内容(比如:说明性文字) 答案:101466 先按照正常情况进行,如果铺满了就进行检查,检查完如果符合条件,再把数组转成string放入到set里面去,进行去重 #include<iostream> #include<set> using namespace std; const int n = 5; const int m = 12; int a[n][m]; long long sum = 0; set<string> se; void dfs(int count);//count代表现在铺了几块瓷砖了 bool check(); int main() { dfs(0); cout<<sum<<endl;//105760