回溯和DFS效率分析
回溯和DFS效率分析
一、心得
多组数据记得初始化
两组样例,找圆点点的个数
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
6 9
....#.
.....#
......
......
...#..
......
......
#@...#
.#..#.
0 0
测试结果
这题用DFS的次数:
45
44
这题用回溯的次数
7 3103 9439 (7亿)
1 5891 4555(1亿)


回溯的次数远高于DFS,
如果题目能用DFS做,就尽量用DFS做
因为DFS是找出一组解,而回溯是找出所有的解
二、题目
http://noi.openjudge.cn/ch0205/1818/
1818:红与黑
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
- 输入
- 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下
1)‘.’:黑色的瓷砖;
2)‘#’:白色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。
当在一行中读入的是两个零时,表示输入结束。 - 输出
- 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。
- 样例输入
-
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
0 0 - 样例输出
-
45
三、AC代码
//1818:红与黑
#include <iostream>
using namespace std;
int width[]={,,-,};
int height[]={,,,-};
char a[][];
int vis[][];
int w,h;
int w1,h1;
int sum;
/*
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
6 9
....#.
.....#
......
......
...#..
......
......
#@...#
.#..#.
0 0
这题用DFS的次数:
45
44
这题用回溯的次数
7 3103 9439 (7亿)
1 5891 4555(1亿)
*/
void search(int hh,int ww){
for(int i=;i<=;i++){
int h2=hh+height[i];
int w2=ww+width[i];
if(w2>=&&w2<=w&&h2>=&&h2<=h&&a[h2][w2]=='.'&&!vis[h2][w2]){
vis[h2][w2]=;
sum++;
search(h2,w2);
//vis[h2][w2]=0;
}
}
} int main(){
freopen("in.txt","r",stdin);
while(true){
cin>>w>>h;
if(w==&&h==) break;
sum=;
for(int i=;i<=h;i++){
for(int j=;j<=w;j++){
char c1;
cin>>c1;
if(c1=='@'){
w1=j;
h1=i;
}
a[i][j]=c1;
vis[i][j]=;
}
}
vis[h1][w1]=;
search(h1,w1); //cout<<h1<<w1<<endl;
//cout<<a[8][2]<<endl;
cout<<sum<<endl;
}
return ;
}
回溯和DFS效率分析的更多相关文章
- 递归,回溯,DFS,BFS的理解和模板【摘】
递归:就是出现这种情况的代码: (或者说是用到了栈) 解答树角度:在dfs遍历一棵解答树 优点:结构简洁缺点:效率低,可能栈溢出 递归的一般结构: void f() { if(符合边界条件) { // ...
- 递归,回溯,DFS,BFS的理解和模板
LeetCode 里面很大一部分题目都是属于这个范围,例如Path Sum用的就是递归+DFS,Path Sum2用的是递归+DFS+回溯 这里参考了一些网上写得很不错的文章,总结一下理解与模板 递归 ...
- in和exists的区别与SQL执行效率分析
可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'), ...
- mssql分页原理及效率分析
下面是常用的分页,及其分页效率分析. 1.分页方案一:(利用Not In和SELECT TOP分页) 语句形式: SELECT TOP 10 * FROM TestTable WHERE (ID NO ...
- 团队工作效率分析工具gitstats
如果你是团队领导,关心团队的开发效率和工作激情:如果你是开源软件开发者,维护者某个repo:又或者,你关心某个开源软件的开发进度,那么你可以试一试gitstats. gitstats 是一个git仓库 ...
- 声笔飞码GB2312单字效率分析
-----------------------声笔飞码强字方式单字效率分析-------------------------- 2 keys: 567 items, 381900209 ...
- Flash和js交互的效率分析
Flash和js交互的效率分析 AS代码: var time:int = getTimer(); for (var i:int = 0; i < 50000; i++) { External ...
- [GIt] 团队工作效率分析工具gitstats
copy : http://www.cnblogs.com/ToDoToTry/p/4311637.html 如果你是团队领导,关心团队的开发效率和工作激情:如果你是开源软件开发者,维护者某个repo ...
- 递归,回溯和DFS的区别
递归是一种算法结构,回溯是一种算法思想一个递归就是在函数中调用函数本身来解决问题回溯就是通过不同的尝试来生成问题的解,有点类似于穷举,但是和穷举不同的是回溯会“剪枝”,意思就是对已经知道错误的结果没必 ...
随机推荐
- 超过70亿条数据的mysql 去重
1.数据库层面: 2.业务层面:接口去重.浏览器显示端去重:
- Replay attack 回放攻击
w http://baike.baidu.com/item/重放攻击 重放攻击(Replay Attacks)又称重播攻击.回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一 ...
- cocos2d 场景切换和弹出场景、收回场景
场景弹出收回很简单 用以下代码在任意一个地方显示“设置场景”: [[CCDirector sharedDirector] pushScene:[Settings scene]]; 如果你身处“设置场景 ...
- pytho创建二维码简单版
pytho创建二维码简单版 import qrcode aa = qrcode.make("https://github.com/phygerr/") aa.save('C:\Us ...
- leetcode -day 15 Distinct Subsequences
1. Distinct Subsequences Given a string S and a string T, count the number of distinct subsequen ...
- Linux环境安装nodejs
安装node 去官网下载nodejs 根据下载的文件可以看出它的压缩方式是.xz的方式,所以不能直接使用linux命令tar直接下载. xz -d node-v10.6.0-linux-x64.tar ...
- cas无缝单点登录(原创)
之前一直有一个问题残绕着自己,今天,终于很粗糙的解决了这个问题. 众所周知,按照cas单点登录,默认情况下,在不登录的情况下,打开网站是必须要跳转到登录页面的.那有什么方法可以控制吗,当然有,很简单, ...
- Java集合(1):ArrayList
Java容器类的用途是“保存对象”,分为两类:Map——存储“键值对”组成的对象:Collection——存储独立元素.Collection又可以分为List和Set两大块.List保持元素的顺序(有 ...
- Nodejs学习计划
此文章已经发表于本人博客. 由于公司要求这段时间在学习Nodejs,基本靠自摸一路走来踩了很多坑浪费很多时间,今天就来这里说下,顺便计划一下接下来的学习计划,目前自己做个博客,项目过程中学习了js类以 ...
- java实现简单邮件的发送以及常见问题
java实现简单邮件的发送以及常见问题 最近遇到个需求需要实现发送邮件的功能,以前做发送邮件功能都是有邮箱用户名密码,通过用户名密码连接对应的SMTP服务器来实现邮件的发送.但是这次用公司内部的邮箱, ...