NOJ——1559Jump to the Top of Mountain(简单暴力DFS+渣渣代码)

  • [1559] Jump to the Top of Mountain

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • Have you played a game named Minecraft? 
    In the game, there is a thing alloy you can not destroy, and its shape is a 1*1*1 area cube. I can only jump 1 meter at vertical height, it means I can jump from x meters height to y meters height when y is not more than x+1.

    Now, there is a rectangle field of m*n areas, each area is a positive interger X, X means the number of alloy in this area. You can only jump to four adjacent areas(up, down, left and right).

    At the beginning, you are at out of the rectangle field, and the height is 0 out of the rectangle field. 
    Can you help me? I only want to know if I can jump to the peak of field?

  • 输入
  • Input ends of EOF. 
    First line contains two positive integers m and n(3 <= m, n <= 100). 
    Then m lines, each line contains n intergers X(0 <= X <= 10000). 
  • 输出
  • If I can jump to the peak, output "YES", or output "NO". 
  • 样例输入
  • 5 5
    2 2 1 2 2
    2 2 2 2 2
    2 2 3 2 2
    2 2 2 2 2
    2 2 2 2 2
    3 3
    2 1 2
    2 0 1
    1 1 3
    4 4
    1 1 1 1
    1 3 1 2
    1 1 1 3
    1 1 1 4
    4 4
    1 2 3 4
    8 7 6 5
    9 10 11 12
    16 15 14 13
    
  • 样例输出
  • YES
    NO
    YES
    YES

基本没写过几道搜索。由于从边缘进入,枚举边缘所有格子进行搜索即可,如果认真读题肯定可以知道能向低处走...以为只能平地或高一格还赏了一个WA。蛋疼

代码非常搓+渣:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
int pos[110][110];
int vis[110][110];
int flag=0;
int tall;
int n,m;
void look(const int &x,const int &y,const int &pre)
{
	if(x<0||y<0||x>=n||y>=m||vis[x][y]==1)//边界+是否访问过判断
		return;
	vis[x][y]=1;//标记访问
	if(pos[x][y]-pre<=1)
	{
		if(pos[x][y]==tall)
		{
			flag=1;
			puts("YES");
			return;
		}
		look(x+1,y,pos[x][y]);
		if(!flag)
			look(x-1,y,pos[x][y]);
		if(!flag)
			look(x,y+1,pos[x][y]);
		if(!flag)
			look(x,y-1,pos[x][y]);
	}
	else
	{
		vis[x][y]=0;//路不通,不算访问过。
		return;
	}
}
int main(void)
{
	int i,j;
	while (~scanf("%d%d",&n,&m))
	{
		memset(pos,0,sizeof(pos));
		tall=-1;flag=0;
		for (i=0; i<n; i++)
		{
			for (j=0; j<m; j++)
			{
				scanf("%d",&pos[i][j]);
				tall=max(tall,pos[i][j]);
			}
		}
		if(tall==0)
		{
			puts("NO");
			continue;
		}
		for (j=0; j<m; j++)
		{
			if(pos[0][j]==1)
			{
				memset(vis,0,sizeof(vis));
				look(0,j,0);
			}
			if(flag)
				break;
		}
		if(!flag)
		{
			for (j=0; j<m; j++)
			{
				if(pos[n-1][j]==1)
				{
					memset(vis,0,sizeof(vis));
					look(n-1,j,0);
				}
				if(flag)
					break;
			}
		}
		if(!flag)
		{
			for (i=0; i<n; i++)
			{
				if(pos[i][0]==1)
				{
					memset(vis,0,sizeof(vis));
					look(i,0,0);
				}
				if(flag)
					break;
			}
		}
		if(!flag)
		{
			for (i=0; i<n; i++)
			{
				if(pos[i][m-1]==1)
				{
					memset(vis,0,sizeof(vis));
					look(i,m-1,0);
				}
				if(flag)
					break;
			}
		}
		if(!flag)
			puts("NO");
	}
	return 0;
}
时间: 2024-10-08 00:01:33

NOJ——1559Jump to the Top of Mountain(简单暴力DFS+渣渣代码)的相关文章

简单实用的HTML代码

简单实用的HTML代码 一.HTML各种命令的代码: 1.文本标签(命令) <pre></pre> 创建预格式化文本 <h1></h1> 创建最大的标题 <h6></h6> 创建最小的标题 <b></b> 创建黑体字 <i></i> 创建斜体字 <tt></tt> 创建打字机风格的字体 <cite></cite> 创建一个引用,通常是斜体

原生js简单轮播图 代码

在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用面向过程函数式编程去实现,相对于面向对象设计模式,代码难免会显得臃肿冗余.但没有面向对象的抽象却很适合新手理解与学习.已经在BAT的同学看到希望少喷点.另外可以多提意见. 轮播图的原理: 一系列的大小相等的图片平铺,利用CSS布局只显示一张图片,其余隐藏.通过计算偏移量利用定时器实现自动播放,或通过

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

UVA 572(简单的dfs)

Description The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots. It

三大框架(SSH)关于URL转发乱码问题(最简单暴力的一种解决办法)

这两天在整合三大框架时遇上Struts2的URL转发乱码问题,搞了很久也上网查了很多资料,写了过滤器,改过配置,全部都没用.只能用最简单暴力的一种,手动转换乱码.因为编辑器一开始默认的编码是ISO-8859-1,所以要将ISO-8859-1转换成utf-8. 一般乱码问题,先检验数据库的编码是否对应,一般安装数据库的时候设定了默认编码,如果没有设定为utf-8,添加中文时可能会出现乱码---只能修改配置或重装数据库(这不是本博文的重点).检验数据库后,再检验页面编码是否一致,若还不能解决乱码问题

python写的简单有效的爬虫代码

python写的简单有效的爬虫代码 by 伍雪颖 import re import urllib def getHtml(url): html = urllib.urlopen(url) scode = html.read() return scode def getImage(source): reg = r'src="(.*?\.jpg)"' imgre = re.compile(reg) images = re.findall(imgre,source) x = 0 for i

初学者如何做一个简单的计算器,代码分享

先新建一个类 startCalculator 声明如下 #import <Foundation/Foundation.h> @interface StartCalculator : NSObject //声明两个要计算的变量 @property float opValue1; @property float opValue2; //声明一个运算符 @property char op; //普通方法 //- (float) gzyWorkAdd; // //- (float) gzyWorkSu

PHP分页初探 一个最简单的PHP分页代码的简单实现

PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核心就是围绕这条语句展开的,SQL语句说明:查询goods数据表从第2条数据开始取出7条数据.在分页代码中,7表示每页显示多少条内容,2通过公式计算表示翻页数,通过传入不同参数替换"2"的值,即可筛选出不同的数据. index.php: ? 1 2 3 4 5 6 7 8 9 10 11 1

利用redis List队列简单实现秒杀 PHP代码实现

利用redis List队列简单实现秒杀 PHP代码实现 2018年05月28日 11:37:46 m_nanle_xiaobudiu 阅读数 35674更多 分类专栏: Redis 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80479666 一 生产者producer部分 ---------------------