2016 11月最后一周

这一周复习了一下目前大概了解的唯一算法——深度优先搜索算法(DFS)。
关于各种细节的处理还是极为不熟练,根据题意判断是否还原标记也无法轻松得出结论。
不得不说,距离一个准ACMer我都有相当差距,这条路是否能行通也无从得知。
明天就是新生赛了,GG的时候即将到来。。。但无论成功失败,我也不是抱着争些什么,
证明自己之类的想法而在志愿的每一项都填上计算机还不调剂结果滑进二本的对吧(并且并不是很后悔),
还是那句话,他强任他强,走好自己的路就好。
菜鸟一思考,大佬就发笑,但若作为菜鸟还不思考,那估计永远是一个菜鸟。

嗯,这周初终于拿出了垫laptop的《啊哈!算法》开始看起来。
书是本好书,非常适合我这种小学生水平的选手,反正我现在终于理解quicksort到底是个怎样的原理了。。。
看完桶、冒泡、快速三种排序,我就直接跳到了深度优先搜索算法这一章,感觉看书还是比瞎JB学好一点,
它的模板也比我之前写的明晰、好看多了。
(关于新的模板http://www.cnblogs.com/ray-coding-in-rays/p/6127150.html)

过了几段示例题代码之后,我决定找HDOJ那道我唯一写出的简单DFS题
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1241
题意大致就是将矩形区域中有多少个@组成的区域,*为隔开的符号

,用新的模板重新写一遍,然后我就发现自己快啥都忘记了。。。
反正一番挣扎之后终于搞出来了。

第一次做,我的AC代码是这样子的:

 #include<stdio.h>
 #define MAXN 100

 char map[MAXN][MAXN];

 void dfs(int,int);

 int main(void)
 {
     int length,width;
     int i,j;
     int count;
     while(~scanf("%d %d",&length,&width))
     {
         count=;
         ) break;
           ;i<length;i++)
             ;j<=width;j++)
             {
                 scanf("%c",&map[i][j]);
             }
         ;i<length;i++)
             ;j<width;j++)
             {
                 if(map[i][j]=='@')
                 {
                     dfs(i,j);
                     count++;
                 }
             }
         printf("%d\n",count);
     }

     ;
 }

 void dfs(int x,int y)
 {
     if(map[x][y]=='@')
     {
         map[x][y]='*';
         dfs(x+,y);
         dfs(x,y+);
         dfs(x-,y);
         dfs(x,y-);
         dfs(x+,y+);
         dfs(x+,y-);
         dfs(x-,y-);
         dfs(x-,y+);
     }
     else
         return;
 }

感觉太粗糙了。。。 ,那么框架重构之后:

 #include <stdio.h>

 ][];
 int width, lenth;
 //这里定义一个数组,用来表示检索点的移动
 ][] = {
     { , },{ , },{ -, },{ ,- },
     { , },{ ,- },{ -,- },{ -, }
 };
 void DFS(int x, int y)
 {
     int k, tx, ty;

     ; k < ; k++) // 8种移动方式
     {
         tx = x + move[k][];
         ty = y + move[k][];
         // 检查是否合法
          || ty< || tx >= lenth || ty >= width) continue;
         if (map[tx][ty] == '*') continue;
         if (map[tx][ty] == '@')
         {
             // 将其标记为非目标状态
             map[tx][ty] = '*';
             DFS(tx, ty);
             // 注意,此处无需还原标记实现回溯
         }
     }
     return;
 }

 int main(void)
 {
     int i, j, count;
     while (~scanf("%d %d", &lenth, &width))
     {
         count = ;
         ) break;
         ; i<lenth; i++)
             // 这里是一个小改进,逐行读入字符串就不用担心末尾回车的问题了
             scanf("%s", map[i]);
         ; i<lenth; i++)
             ; j < width; j++)
             {
                 if (map[i][j] == '@')
                 {
                     DFS(i, j);
                     count++;
                 }
             }
         printf("%d\n", count);
     }
     ;
 }

嗯,感觉好多了,that’s all.

【伪一周小结(没错我一周就做了这么点微小的工作)】HDOJ-1241 Oil Deposits 初次AC粗糙版对比代码框架重构版的更多相关文章

  1. Java结对编程四则运算一周小结

    Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...

  2. Alpha版本第二周小结

               软工作业---Alpha版本第二周小结   姓名 学号 周前计划 每周实际工作记录 自我打分 yrz 1417 协助原型设计的完善,督促组员完成个人任务 原型优化设计未完成,但体 ...

  3. 软工作业-----Alpha版本第一周小结

            软工作业-----Alpha版本第一周小结   Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...

  4. 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结

    作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

  5. (干货)java中如何根据一个时间获取属于本年那一周,本周的开始时间以及最后一天时间。并且设置起始时间为周6.结束时间为周5

    本人亲测,有用,适用性比较强,直接上代码说话. package com.helloBike.data; import java.text.ParseException; import java.tex ...

  6. java第二周小结

    这是接触Java的第一周,了解这个语言的一些基础知识,下面是对这段时间重要知识点的汇总 一.Java是一种面向对象的语言    特点为:简洁高效.可移植性.适合分布式计算.健壮防患于未然的特性.多线程 ...

  7. ACM暑假集训第三周小结

    这一周学的图论,学了这么些 两种存图的方法:邻接矩阵( map[n][n] ) , 邻接表( headlis[n] , vector<int> G[n] )存图的方法,各有各的好,我的理解 ...

  8. 团队第三次作业:Alpha版本第二周小结

    姓名 学号 周前计划安排 每周实际工作记录 自我打分 XXX 061109 1.对原型设计与编码任务进行进一步的规划与任务分配 2.协调与统一已完成的部分原型设计页面风格并针对部分页面提出了改进建议 ...

  9. 团队第三次作业:Alpha版本第一周小结

    姓名 学号 周前计划安排 每周实际工作记录 自我打分 XXX 061109 1.原型设计与编码任务分配 2.构思程序个性化测试模块的初步实现 1.原型设计与编码任务分配 2.设计了部分类及其成员函数( ...

随机推荐

  1. 自定义viewpager的界面切换动画

    核心操作: 1.创建一个类实现 android.support.v4.view.ViewPager.PageTransformer 根据 position 实现判断哪个界面进行界面切换动画 publi ...

  2. A. Grasshopper And the String(CF ROUND 378 DIV2)

    A. Grasshopper And the String time limit per test 1 second memory limit per test 256 megabytes input ...

  3. 第七十九,CSS3背景渐变效果

    CSS3背景渐变效果 学习要点: 1.线性渐变 2.径向渐变 本章主要探讨HTML5中CSS3背景渐变功能,主要有两种渐变方式:线性渐变和径向 (放射性)渐变. 一.线性渐变 linear-gradi ...

  4. 2016 C++及系统软件技术大会亮点

    2016 C++及系统软件技术大会将于201610月28日-29日在上海举办!此次2016 C++及系统软件技术大会秉承"全球专家. 连接智慧"的理念!大会特邀C++之父Bjarn ...

  5. Sass与Compress实战:第一章

    1.消除冗余代码的方式: ▶通过变量来复用属性值 例如,一段冗余的CSS代码: h1#brand { color : #1875e7 } #sidebar { background-color : # ...

  6. php基础(二)数组

    本文主要内容来自w3cschool 在 PHP 中,有三种数组类型: 索引数组 - 带有数字索引的数组 关联数组 - 带有指定键的数组 多维数组 - 包含一个或多个数组的数组 PHP 索引数组 有两种 ...

  7. Introducing 'bind'

    原文地址:http://fsharpforfunandprofit.com/posts/computation-expressions-bind/ 上一篇讨论了如何理解let作为一个能实现contin ...

  8. 5、Struts2自定义拦截器

    一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影)    ActionMapper 传媒公司(包装明星) ActionMapping 明星           ...

  9. 1、第一个Struts2程序

    为了让我们以后开发方便,我们需要配置struts.xml的dtd的头,这样在编写struts.xml文件中可以有提示! 操作如下: (1)打开myeclipse→window→Preferences→ ...

  10. onSaveInstanceState()和onRestoreInstanceState()方法

    Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPause()等生命周期方 ...