2165:给出初始位置,给出不可走区域,求能够到达的位置个数。
Sample Input
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0
Sample Output
45
59
6
13
思路:DFS遍历。上下左右按一定顺序递归,全局变量进行统计。
注意二维数组的第一个下标对应高度值,第二个下标对应宽度值。
#include<iostream>
using namespace std;
#include<memory.h>
#include<stdio.h>
int map[21][21];
int sum;
int ori[4][2]={
0,1,//right
0,-1,//left
1,0,//up
-1,0 //down
};
bool legal(int x,int y,int w,int h)
{
if(x>=h||x<0)
return false;
if(y>=w||y<0)
return false;
else
return true;
}
void DFS(int x,int y,int w,int h)
{
int tx,ty,i;
sum++;
map[x][y]=1; // no more visit
for(i=0;i<4;i++)
{
tx=x+ori[i][0];
ty=y+ori[i][1];
if(!map[tx][ty]&&legal(tx,ty,w,h))
{
DFS(tx,ty,w,h);
}
}
}
int main()
{
int W;
int H;
int x;
int y;
char c;
while(1)
{
scanf("%d%d",&W,&H);
if((W||H)==0) //= is higher than or
break;
memset(map,0,sizeof(map));
for(int i=0;i<H;i++)
{
getchar();
for(int j=0;j<W;j++)
{
c=getchar();
if(c=='#')
{
map[i][j]=1;
}
else if(c=='@')
{
x=i;
y=j;
}
}
}
sum=0;
DFS(x,y,W,H);
printf("%d\n",sum);
}
}
分享到:
相关推荐
- **特点**: 本书系统介绍了数值分析的基础理论和方法,对于理解算法中的计算精度等问题非常有用。 - **适用人群**: 适合对数值计算感兴趣的学习者。 - **内容覆盖**: - 插值方法 - 数值积分 - 微分方程数值解法...
根据提供的文件信息,本文将对在线...通过这些平台,不仅可以提高编程技能,还能接触到不同类型的算法问题,对于提升个人综合能力非常有帮助。希望每位学习者都能找到最适合自己的平台,在算法的海洋里不断探索与进步。
- **浙江大学微软技术俱乐部**和**ZOJ**(在线评测系统)是训练和选拔优秀选手的重要平台。 - **参考书籍**:《C++ Primer》、《C++标准程序库》、《算法导论》、《算法艺术与信息学竞赛》等是深入学习的基础资料...
- **ZOJ 1610** 和 **POJ 2777**:这两道题都是典型的线段覆盖问题,需要利用线段树来解决。基本思路是通过线段树维护每个区间是否被覆盖的状态。对于每个覆盖请求,更新线段树对应区间中的覆盖状态,并统计完全被...
1. **Strange Country II (ZOJ-3332) 竞赛图** - **题目描述**:在一种特殊的图——竞赛图中寻找哈密顿回路。 - **解题思路**:竞赛图中每个节点的入度和出度都为1,因此可以按照顺序构造哈密顿回路。 - **数据...
动态规划是一种重要的算法思想,主要用于解决具有重叠子问题和最优子结构的问题。 - **状态定义**:明确问题的状态空间,定义状态转移方程。 - **状态转移**:确定如何从已知状态转移到目标状态。 - **示例题目**...
- 解决ZOJ等网站上的难题 - 参加各类在线比赛,体验比赛氛围 - 对已解决的题目进行深入分析,探索更优解法 通过以上训练计划,可以在短时间内迅速提高算法和编程能力,更好地应对各种类型的ACM竞赛。
#### 2.2 Zhejiang University ACM Online Judge (ZOJ) - **网址**: http://acm.zju.edu.cn - **特点**: - 由浙江大学维护,题目难度适中,适合练习ACM竞赛题目。 - 界面简洁,易于上手。 #### 2.3 Sichuan ...
- 经常参与ZOJ等在线评测系统的练习。 - 参加校内或线上的模拟赛。 - 注重团队协作能力的培养。 - 养成良好的编程习惯和调试能力。 #### 四、常见算法与数据结构详解 - **图论**: - 最短路径算法(Floyd、...
### 备战ACM资料:DP问题及其他知识点详解 #### ACM概述与背景 ACM (Association for Computing Machinery) 是一个国际计算机科学领域的专业组织,它所举办的编程竞赛(ACM International Collegiate Programming ...
ACM国际大学生程序设计竞赛是由ACM(美国计算机协会)主办的一项世界级比赛,旨在评估参赛队伍解决复杂问题的能力、编程技能以及团队合作精神。这项赛事在全球范围内享有极高的声誉,被认为是衡量学生算法设计与实现...
- 第三章详细介绍了ACM程序设计中常用的编程技巧,这些技巧对于解决实际问题至关重要。 - 例如,如何有效地使用STL中的容器来存储和管理数据,如何利用特定的算法优化程序的时间复杂度等。 ##### 4. ACM 竞赛题目...
【标题】"ZOJ-CPP.zip" 是一个包含ZOJ(在线判题系统ZeroJudge)网站上多个C++编程练习解答的压缩包。这个压缩包的名称表明它专注于C++语言,很可能是一个学习资源,旨在帮助初学者理解和解决动态规划问题。 【描述...
- **特点**: POJ相较于ZOJ建立时间稍晚,但题目更新迅速,数量已接近或超过了ZOJ。POJ的特点在于举办在线比赛的频率较高,这对于参赛者来说是一个很好的实战机会。与ZOJ相比,POJ的数据难度略低,但这并不意味着其...
### ZOJ全部题目分类详解 #### 一、概述 ZOJ(Zhejiang Online Judge)作为一项在线编程竞赛平台,提供了丰富的算法题目供学习者练习。本文将根据所提供的文件中的“初学者题”、“模拟问题”、“动态规划”及...