【伪一周小结(没错我一周就做了这么点微小的工作)】HDOJ-1241 Oil Deposits 初次AC粗糙版对比代码框架重构版
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粗糙版对比代码框架重构版的更多相关文章
- Java结对编程四则运算一周小结
Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...
- Alpha版本第二周小结
软工作业---Alpha版本第二周小结 姓名 学号 周前计划 每周实际工作记录 自我打分 yrz 1417 协助原型设计的完善,督促组员完成个人任务 原型优化设计未完成,但体 ...
- 软工作业-----Alpha版本第一周小结
软工作业-----Alpha版本第一周小结 Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...
- 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结
作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- (干货)java中如何根据一个时间获取属于本年那一周,本周的开始时间以及最后一天时间。并且设置起始时间为周6.结束时间为周5
本人亲测,有用,适用性比较强,直接上代码说话. package com.helloBike.data; import java.text.ParseException; import java.tex ...
- java第二周小结
这是接触Java的第一周,了解这个语言的一些基础知识,下面是对这段时间重要知识点的汇总 一.Java是一种面向对象的语言 特点为:简洁高效.可移植性.适合分布式计算.健壮防患于未然的特性.多线程 ...
- ACM暑假集训第三周小结
这一周学的图论,学了这么些 两种存图的方法:邻接矩阵( map[n][n] ) , 邻接表( headlis[n] , vector<int> G[n] )存图的方法,各有各的好,我的理解 ...
- 团队第三次作业:Alpha版本第二周小结
姓名 学号 周前计划安排 每周实际工作记录 自我打分 XXX 061109 1.对原型设计与编码任务进行进一步的规划与任务分配 2.协调与统一已完成的部分原型设计页面风格并针对部分页面提出了改进建议 ...
- 团队第三次作业:Alpha版本第一周小结
姓名 学号 周前计划安排 每周实际工作记录 自我打分 XXX 061109 1.原型设计与编码任务分配 2.构思程序个性化测试模块的初步实现 1.原型设计与编码任务分配 2.设计了部分类及其成员函数( ...
随机推荐
- Linux常用操作
1. Latex参考文献格式 http://blog.163.com/sunkun_hust/blog/static/204454119201482524222283/
- Vue.js + Seajs 实例(包含vue-router使用)
这个Demo 相关JS: Sea.js : Version 2.3.0 seajs-text : Version 2.3.0 vue.js : Version 1.0.24 vue-router: ...
- mac安装软件系列
1,mac安装homebrew,注意不能用root权限安装 #ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew ...
- Android View的事件分发
如果接触android开发时间足够长的话,或多或少都会遇到各种各样事件冲突的问题,要想解决这类问题,对深入理解事件分发机制是很有必要的,接下来几天都会尽自己所能尽可能将这方面讲清楚. View的事件 ...
- Number String
Number String 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 dp 定义状态:dp[i][j]为当strlen=i,数字结尾为j的 ...
- 第六十二节,html分组元素
html分组元素 学习要点: 1.分组元素总汇 2.分组元素解析 本章主要探讨HTML5中分组元素的用法.所谓分组,就是用来组织相关内容的HTML5元素,清晰有效的进行归类. ...
- ecshop里的$_CFG从哪来的
以前经常有朋友问我, ecshop系统的$_CFG这个数组是从哪里来的,在哪里定义并赋值的. 下面就给大家说一下这个全局变量 $GLOBALS['_CFG']. ecshop里的 $_CFG数组主 ...
- apt-get 安装路径
apt-get安装目录和安装路径:apt-get 下载后,软件所在路径是:/var/cache/apt/archivesubuntu 默认的PATH为PATH=/home/brightman/bin: ...
- Java 集合 JDK1.7的LinkedList
Java 集合 JDK1.7的LinkedList @author ixenos LinkedList LinkedList是List接口的双向链表实现,JDK1.7以前是双向循环链表,以后是双向非循 ...
- hdu_5314_Happy King(树的点分治)
题目链接:hdu_5314_Happy King 题意: 给出一颗n个结点的树,点上有权值: 求点对(x,y)满足x!=y且x到y的路径上最大值与最小值的差<=D: 题解: 还是树的点分治,在统 ...