COJN 0487 800301红与黑

800301红与黑
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B

试题描述

有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

输入

包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下
1)‘.’:黑色的瓷砖;
2)‘#’:白色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。
当在一行中读入的是两个零时,表示输入结束。

输出

对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。

输入示例

6 9 
....#. 
.....# 
...... 
...... 
...... 
...... 
...... 
#@...# 
.#..#. 
0 0

输出示例

45

其他说明

 

题解:搜索练习题,要注意ans,vis的清零。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<cstring>
 7 #define PAU putchar(‘ ‘)
 8 #define ENT putchar(‘\n‘)
 9 using namespace std;
10 const int maxn=20+5;
11 char A[maxn][maxn];bool vis[maxn][maxn];
12 int mx[]={0,0,-1,1},my[]={-1,1,0,0};
13 inline int read(){
14     int x=0,sig=1;char ch=getchar();
15     for(;!isdigit(ch);ch=getchar())if(ch==‘-‘)sig=0;
16     for(;isdigit(ch);ch=getchar())x=10*x+ch-‘0‘;
17     return sig?x:-x;
18 }
19 inline void write(int x){
20     if(x==0){putchar(‘0‘);return;}if(x<0)putchar(‘-‘),x=-x;
21     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
22     for(int i=len-1;i>=0;i--)putchar(buf[i]+‘0‘);return;
23 }
24 int n,m,sx,sy,ans;
25 void find(){
26     for(int i=0;i<n;i++){
27         for(int j=0;j<m;j++){
28             if(A[i][j]==‘@‘){A[i][j]=‘.‘;sx=i;sy=j;return;}
29         }
30     }return;
31 }
32 void dfs(int x,int y){
33     if(x<0||x>=n||y<0||y>=m||vis[x][y]||A[x][y]!=‘.‘)return;ans++;vis[x][y]=true;
34     for(int d=0;d<4;d++)dfs(x+mx[d],y+my[d]);return;
35 }
36 void init(){
37     while(scanf("%d%d",&m,&n)==2){
38         if(!m&&!n)return;
39         memset(vis,false,sizeof(vis));ans=0;
40         for(int i=0;i<n;i++)scanf("%s",A+i);
41         find();dfs(sx,sy);write(ans);ENT;
42     }
43     return;
44 }
45 void work(){
46     return;
47 }
48 void print(){
49     return;
50 }
51 int main(){init();work();print();return 0;}
时间: 2024-10-11 12:34:18

COJN 0487 800301红与黑的相关文章

codevs 2806 红与黑

2806 红与黑 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖.每块瓷砖涂成了红色或黑色.一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上.编写一个程序,计算他通过重复上述移动所能经过的黑砖数. 输入描述 Input Description 输入包含多个数据集.一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的

红与黑

传送门 2806 红与黑 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖.每块瓷砖涂成了红色或黑色.一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上.编写一个程序,计算他通过重复上述移动所能经过的黑砖数. 输入描述 Input Description 输入包含多个数据集.一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和

POJ 1979 Red and Black (红与黑)

POJ 1979 Red and Black (红与黑) Time Limit: 1000MS    Memory Limit: 30000K Description 题目描述 There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to

从迷宫问题、连连看、红与黑说回溯算法遍历解空间

今天上午完成了“迷宫”问题,也思考了“2.5基本算法之搜索”的另外几个问题:小游戏(就一连连看),马走日,红与黑等.我所关注的这几个问题都可以用回溯算法来进行解决.回溯算法简单说就是当运行到叶子节点证明不是解时回到上一层节点继续遍历,如此循环直到找到一个解:如果需要全部解,可以继续遍历,如果不需要可以直接退出.很明显,回溯算法是一种深度优先的搜索算法,非常适合在解空间中找到一个解的问题. 一.迷宫问题: 1792:迷宫 总时间限制: 3000ms 内存限制: 65536kB 描述 一天Exten

广度优先搜索 codevs 2806 红与黑

codevs 2806 红与黑 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖.每块瓷砖涂成了红色或黑色.一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上.编写一个程序,计算他通过重复上述移动所能经过的黑砖数. 输入描述 Input Description 输入包含多个数据集.一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和

2806 红与黑

2806 红与黑 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖.每块瓷砖涂成了红色或黑色.一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上.编写一个程序,计算他通过重复上述移动所能经过的黑砖数. 输入描述 Input Description 输入包含多个数据集.一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的

HDU1312 / POJ1979 / ZOJ2165 Red and Black(红与黑) 解题报告

题目链接:HDU1312 / POJ1979 / ZOJ2165 Red and Black(红与黑) Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9902    Accepted Submission(s): 6158 Problem Description There is a rectangular

codevs2806 红与黑

难度等级:白银 codevs2806 红与黑 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖.每块瓷砖涂成了红色或黑色.一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上.编写一个程序,计算他通过重复上述移动所能经过的黑砖数. 输入描述 Input Description 输入包含多个数据集.一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20.每个数据集有H行,其中每行包含W个字符.每个字符

大数据的红与黑

刘炼摄/光明网 资料图片 世界正在步入IT革命和全球化的第二乐章—“云时代”.通过互联网,数据中心的巨大计算和存储功能像云彩般覆盖世界的每一个角落.今天,无论是企业还是个人都可以超越国境便利和自由地利用高性能的云计算系统,人类的生活.工作和创业环境骤然剧变. —<步入云时代>,周牧之 这是一个危机四伏的世界.自2008年美国次贷危机之后,紧接着就是欧洲主权债务危机.美国和欧洲两大世界经济的领航者都在衰退的边缘徘徊,亚 洲的日本经济形势难言乐观,可怕的是,人们根本看不到走出危机的出路.金砖国家虽