回溯和DFS效率分析
2017-08-02 09:04
120 查看
回溯和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代码
1 //1818:红与黑 2 #include <iostream> 3 using namespace std; 4 int width[4]={1,0,-1,0}; 5 int height[4]={0,1,0,-1}; 6 char a[25][25]; 7 int vis[25][25]; 8 int w,h; 9 int w1,h1; 10 int sum; 11 /* 12 6 9 13 ....#. 14 .....# 15 ...... 16 ...... 17 ...... 18 ...... 19 ...... 20 #@...# 21 .#..#. 22 6 9 23 ....#. 24 .....# 25 ...... 26 ...... 27 ...#.. 28 ...... 29 ...... 30 #@...# 31 .#..#. 32 0 0 33 这题用DFS的次数: 34 45 35 44 36 这题用回溯的次数 37 7 3103 9439 (7亿) 38 1 5891 4555(1亿) 39 */ 40 void search(int hh,int ww){ 41 for(int i=0;i<=3;i++){ 42 int h2=hh+height[i]; 43 int w2=ww+width[i]; 44 if(w2>=1&&w2<=w&&h2>=1&&h2<=h&&a[h2][w2]=='.'&&!vis[h2][w2]){ 45 vis[h2][w2]=1; 46 sum++; 47 search(h2,w2); 48 //vis[h2][w2]=0; 49 } 50 } 51 } 52 53 int main(){ 54 freopen("in.txt","r",stdin); 55 while(true){ 56 cin>>w>>h; 57 if(w==0&&h==0) break; 58 sum=1; 59 for(int i=1;i<=h;i++){ 60 for(int j=1;j<=w;j++){ 61 char c1; 62 cin>>c1; 63 if(c1=='@'){ 64 w1=j; 65 h1=i; 66 } 67 a[i][j]=c1; 68 vis[i][j]=0; 69 } 70 } 71 vis[h1][w1]=1; 72 search(h1,w1); 73 74 //cout<<h1<<w1<<endl; 75 //cout<<a[8][2]<<endl; 76 cout<<sum<<endl; 77 } 78 return 0; 79 }
相关文章推荐
- 交换变量A,B的代码运行效率分析
- hdu 1045 DFS回溯
- MySQL随机查询记录的效率测试分析
- 对于Oracle中分页排序查询语句执行效率的比较分析
- python中in在list和dict中查找效率的对比分析
- 【Android游戏开发之十】(优化处理)详细剖析Android Traceview效率检视工具,分析程序运行速度!并讲解两种创建SDcard方式!
- MongoDB学习笔记(六) MongoDB索引用法和效率分析
- HDFS源码分析(9):DFSCliet
- Uva129 Krypton Factor【dfs回溯】【例题7-5】
- 三种SQL分页法效率分析(转)
- Linux下算法效率的分析和测量
- 如何分析matlab程序的主要效率问题
- Win7电源效率分析 揪出耗电大户
- 【DFS 回溯】HDU 1045 Fire Net
- UVA 225 - Golygons(dfs回溯)
- MySQL 使用explain分析sql语句的查询效率(一)
- !ZOJ 2100--DFS(递归结束条件和回溯还是没理解好)
- [蓝桥杯] 历届试题 剪格子(dfs+回溯)
- linux内核中打印栈回溯信息 - dump_stack()函数分析
- 正则中的回溯定义与用法分析【JS与java实现】