当前位置: 首页 > news >正文

hdu1010 Tempter of the Bone 成长---纠错

这几天遇到一道比较简单的dfs+小小剪枝。但我就是做了两天,唉~~硬伤丫

而且是写错变量名!!

最主要是写错变量名很多测试用例都能过。。。。。

/*
546MS	288K
*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
char maze[10][10];
int a[] = {-1,0,1,0};
int b[] = {0,1,0,-1};
int w,h,Starti,Startj,Endi,Endj;
int DFS(int si,int sj,int T)
{
    if(T==0 && si==Endi && sj==Endj)
    return 1;
    if(abs(Endi-si)+abs(Endj-sj) > T || (T-abs(Endi-si)-abs(Endj-sj))%2!=0)
    return 0;
    if(T<0)
    return 0;
    for(int i=0;i<4;i++)
    if(si+a[i]>=0 && si+a[i]<h && sj+b[i]>=0 && sj+b[i]<w && maze[si+a[i]][sj+b[i]] == '.')
    {
        maze[si+a[i]][sj+b[i]] = 'X';
        if(DFS(si+a[i],sj+b[i],T-1))
        return 1;
        else
        maze[si+a[i]][sj+b[i]] = '.';
    }
    return 0;
}        
           
int main()
{
    int t;   
    while(scanf("%d%d%d",&h,&w,&t) && h+w+t!=0)
    {
        getchar();
        for(int i=0;i<h;i++)
        {
            //scanf("%s",maze[i]);
            for(int j=0;j<w;j++)
            {
                maze[i][j] = getchar();
                if(maze[i][j] == 'S')
                {
                Starti = i;
                Startj = j;  //我居然把这个学成Endj。。。。。
                }   
                else if(maze[i][j] == 'D')
                {
                    Endi = i;
                    Endj = j;
                    maze[i][j] = '.';
                }     
            } 
            getchar(); 
        }    
            if(t>w*h-1)
            {
            printf("NO\n");
            continue;
            }    
            if(DFS(Starti,Startj,t)) 
            printf("YES\n");
            else
            printf("NO\n");
    }
    system("pause");
    return 0;
}         


下面是优化后的代码。。。

/*
46 MS	328 KB
*/
#include<stdio.h>
#include <iostream>
#include<stdlib.h>
#include<string.h>
#include<math.h>
using namespace std;
char maze[10][10];
int a[] = {0,0,-1,1};
int b[] = {-1,1,0,0};
int w,h,Starti,Startj,Endi,Endj;
int DFS(int si,int sj,int T)
{
    if(T==0 && si==Endi && sj==Endj)
    return 1;
    else
  {
    if((abs(Endi-si)+abs(Endj-sj)) > T )
    return 0;
    /*if((T-abs(Endi-si)-abs(Endj-sj))%2!=0)
    return 0;*/
    /*if(T<0)
    return 0;*/
    
    for(int i=0;i<4;i++)
    if(maze[si+a[i]][sj+b[i]] == '.' && T>0)
    {
        maze[si+a[i]][sj+b[i]] = 'X';
        if(DFS(si+a[i],sj+b[i],T-1))
        return 1;
        maze[si+a[i]][sj+b[i]] = '.';
    }
  }    
    return 0;
}        
           
int main()
{
    int t,sum;   
    while(scanf("%d%d%d",&h,&w,&t) && h!=0 && w!=0 && t!=0)
    {
        //getchar();
        sum = 0;
        memset(maze,'X',sizeof(maze));
        for(int i=1;i<=h;i++)
        {
            //scanf("%s%*c",maze[i]);
            for(int j=1;j<=w;j++)
            {
                //scanf("%c",&maze[i][j]);
                cin>>maze[i][j];
                if(maze[i][j] == 'S')
                {
                Starti = i;
                Startj = j;
                }   
                else if(maze[i][j] == 'D')
                {
                    Endi = i;
                    Endj = j;
                    maze[i][j] = '.';
                }  
                
                if(maze[i][j] == '.')
                   sum++;
            } 
            //getchar(); 
        }    
            if(t>sum || (t+Starti+Startj+Endi+Endj)%2 == 1 )
            {
            printf("NO\n");
            //continue;
            } 
            else
        {  
            maze[Starti][Startj] = 'X'; 
            if(DFS(Starti,Startj,t)) 
            printf("YES\n");
            else
            printf("NO\n");
        }    
    }
    system("pause");
    return 0;
}         
                  




相关文章:

  • lucene 4.x中如何只存储不做索引
  • Win32_8有意思的程序——抓取屏幕
  • php调试和日志记录函数
  • Android实战技术:IPC方式简介教程
  • SICP 习题(1.1,1.2,1.3,1.4)解题总结。
  • linux终端开发环境的配置
  • ADO.NET理论+实践
  • Android实战技术:深入理解Android的RPC方式与AIDL
  • Linux调试器工作原理——基础篇
  • Linux调试器工作原理之二——实现断点
  • 学ACM有用吗?
  • Linux调试器工作原理之三——调试信息
  • hdu1501 Zipper
  • Android实战技术:理解Binder机制
  • SICP 习题(1.5)解题总结。
  • @jsonView过滤属性
  • 【css3】浏览器内核及其兼容性
  • 【笔记】你不知道的JS读书笔记——Promise
  • Date型的使用
  • express + mock 让前后台并行开发
  • fetch 从初识到应用
  • Linux快速复制或删除大量小文件
  • Otto开发初探——微服务依赖管理新利器
  • Python3爬取英雄联盟英雄皮肤大图
  • Sass 快速入门教程
  • 回顾2016
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 码农张的Bug人生 - 见面之礼
  • 深入 Nginx 之配置篇
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 在Mac OS X上安装 Ruby运行环境
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • # 飞书APP集成平台-数字化落地
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $L^p$ 调和函数恒为零
  • (js)循环条件满足时终止循环
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (转)winform之ListView
  • .“空心村”成因分析及解决对策122344
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .cn根服务器被攻击之后
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net mvc 获取url中controller和action
  • .NET 表达式计算:Expression Evaluator
  • .NET大文件上传知识整理
  • .net的socket示例
  • @Documented注解的作用
  • @vue/cli 3.x+引入jQuery
  • @基于大模型的旅游路线推荐方案
  • [ C++ ] 继承
  • [ActionScript][AS3]小小笔记
  • [Angular] 笔记 18:Angular Router
  • [Bugku]密码???[writeup]
  • [C++]——带你学习类和对象