`
linest
  • 浏览: 155638 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

ZOJ-2165* 迷宫问题

    博客分类:
  • acm
 
阅读更多
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);


	}
}
分享到:
评论

相关推荐

    ACM算法经典书籍----最全最详细的书籍推荐!

    - **特点**: 本书系统介绍了数值分析的基础理论和方法,对于理解算法中的计算精度等问题非常有用。 - **适用人群**: 适合对数值计算感兴趣的学习者。 - **内容覆盖**: - 插值方法 - 数值积分 - 微分方程数值解法...

    在线判断-算法题

    根据提供的文件信息,本文将对在线...通过这些平台,不仅可以提高编程技能,还能接触到不同类型的算法问题,对于提升个人综合能力非常有帮助。希望每位学习者都能找到最适合自己的平台,在算法的海洋里不断探索与进步。

    Acm竞赛常用算法与数据结构

    - **浙江大学微软技术俱乐部**和**ZOJ**(在线评测系统)是训练和选拔优秀选手的重要平台。 - **参考书籍**:《C++ Primer》、《C++标准程序库》、《算法导论》、《算法艺术与信息学竞赛》等是深入学习的基础资料...

    线段树题目

    - **ZOJ 1610** 和 **POJ 2777**:这两道题都是典型的线段覆盖问题,需要利用线段树来解决。基本思路是通过线段树维护每个区间是否被覆盖的状态。对于每个覆盖请求,更新线段树对应区间中的覆盖状态,并统计完全被...

    欧拉回路题集

    1. **Strange Country II (ZOJ-3332) 竞赛图** - **题目描述**:在一种特殊的图——竞赛图中寻找哈密顿回路。 - **解题思路**:竞赛图中每个节点的入度和出度都为1,因此可以按照顺序构造哈密顿回路。 - **数据...

    acm新手训练方案新手必备

    动态规划是一种重要的算法思想,主要用于解决具有重叠子问题和最优子结构的问题。 - **状态定义**:明确问题的状态空间,定义状态转移方程。 - **状态转移**:确定如何从已知状态转移到目标状态。 - **示例题目**...

    ACM练习题库

    - 解决ZOJ等网站上的难题 - 参加各类在线比赛,体验比赛氛围 - 对已解决的题目进行深入分析,探索更优解法 通过以上训练计划,可以在短时间内迅速提高算法和编程能力,更好地应对各种类型的ACM竞赛。

    OnlineJudge站点网址

    #### 2.2 Zhejiang University ACM Online Judge (ZOJ) - **网址**: http://acm.zju.edu.cn - **特点**: - 由浙江大学维护,题目难度适中,适合练习ACM竞赛题目。 - 界面简洁,易于上手。 #### 2.3 Sichuan ...

    acm 资料大全 程序 设计 竞赛 icpc

    - 经常参与ZOJ等在线评测系统的练习。 - 参加校内或线上的模拟赛。 - 注重团队协作能力的培养。 - 养成良好的编程习惯和调试能力。 #### 四、常见算法与数据结构详解 - **图论**: - 最短路径算法(Floyd、...

    备战ACM资料 DP问题等

    ### 备战ACM资料:DP问题及其他知识点详解 #### ACM概述与背景 ACM (Association for Computing Machinery) 是一个国际计算机科学领域的专业组织,它所举办的编程竞赛(ACM International Collegiate Programming ...

    acm程序设计曾宗根

    ACM国际大学生程序设计竞赛是由ACM(美国计算机协会)主办的一项世界级比赛,旨在评估参赛队伍解决复杂问题的能力、编程技能以及团队合作精神。这项赛事在全球范围内享有极高的声誉,被认为是衡量学生算法设计与实现...

    国际大学生程序设计竞赛指南—ACM程序设计

    - 第三章详细介绍了ACM程序设计中常用的编程技巧,这些技巧对于解决实际问题至关重要。 - 例如,如何有效地使用STL中的容器来存储和管理数据,如何利用特定的算法优化程序的时间复杂度等。 ##### 4. ACM 竞赛题目...

    zoj-cpp.zip_zoj

    【标题】"ZOJ-CPP.zip" 是一个包含ZOJ(在线判题系统ZeroJudge)网站上多个C++编程练习解答的压缩包。这个压缩包的名称表明它专注于C++语言,很可能是一个学习资源,旨在帮助初学者理解和解决动态规划问题。 【描述...

    在线online judge

    - **特点**: POJ相较于ZOJ建立时间稍晚,但题目更新迅速,数量已接近或超过了ZOJ。POJ的特点在于举办在线比赛的频率较高,这对于参赛者来说是一个很好的实战机会。与ZOJ相比,POJ的数据难度略低,但这并不意味着其...

    ZOJ全部题目分类(分得很细哦)

    ### ZOJ全部题目分类详解 #### 一、概述 ZOJ(Zhejiang Online Judge)作为一项在线编程竞赛平台,提供了丰富的算法题目供学习者练习。本文将根据所提供的文件中的“初学者题”、“模拟问题”、“动态规划”及...

Global site tag (gtag.js) - Google Analytics