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. 【CSS】display: inline-block,内联元素

    什么是内联元素? <CSS权威指南>中文字显示:任何不是块级元素的可见元素都是内联元素.其表现的特性是“行布局”形式,这里的“行布局”的意思就是说其表现形式始终以行进行显示.比如,我们设定 ...

  2. ios 从前台返回到回台 从后台返回到前台 或者 支付宝支付订单后 对界面进行操作

    正常情况下,在AppDelegate中实现下面两个方法,能够监听从后台恢复到前台 - (void)applicationDidEnterBackground:(UIApplication *)appl ...

  3. Jmeter 多台机器产生负载

    使用多台机器产生负载的操作步骤如下: (1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent .然后运行 ...

  4. 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式

    JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式 学习要点: 1.Global对象 2.Math对象 ECMA-262对内置对象的定义是:"由ECMASc ...

  5. AVFoundation--视频录制

    // // ViewController.m // AVFoundationCameraRecording // // Created by ZhuYi on 16/5/3. // Copyright ...

  6. 推荐一篇很好的介绍wpf dependency property的文章

    http://www.codeproject.com/Articles/140620/WPF-Tutorial-Dependency-Property

  7. Java JVM 请别拿“String s=new String("z");创建了多少实例”来面试 [ 转载 ]

    Java 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧 [ 转载 ] @author RednaxelaFX 原文链 ...

  8. infix to postfix 完整版

    #include<iostream> #include<stack> #include<string> #include<deque> using na ...

  9. openwrt 串口无法登陆

    打印这个消息后串口无法进行交互 procd: - init complete - 主要问题是 /etc下inittab脚本中 ::sysinit:/etc/init.d/rcS S boot::shu ...

  10. kettle新建资源库(4)

    工具中找资源库或者CTRL+R