搜索与图论一

1.关于搜索问题,DFS是没有一个固定的模板的,但是也可以进行一下总结

DFS  stack  O(n)   没有固定模板(但是有一般思路)   适用于对空间要求较高

BFS   queue  O(2^n)  有固定模板  有最短性质(对各边权重为1的时候)

2.DFS函数书写思路伪代码:

void   DFS (数据类型  参数,数据类型  参数)

{

  if (出口条件)  输出;

  for(搜索深度)if (新点)  新点赋值;标记为旧点;递归下一层;回溯处理(数值恢复,新旧状态恢复);

}

3.BFS函数书写思路伪代码:

queue<——初始化

    |

while(queue)

{
 auto t <——队头元素

   |

  拓展 t 的所有距离为1 的邻点 x :if ( x 为走过&&可以走)x入队,更新距离数组

}

4.DFS实战分析:

842. 排列数字

给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1n71≤n≤7

输入样例:

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
第一次思路:
1.确定搜索类型    DFS因为从数据规模看,这是个n(n!),从题目描述,也没有最短路性质字眼描述,试了一下,觉得好搞,BFS明显是一层一层搜的,不怎么合适
2.先找出搜索顺序  n个空位,每个空位进行搜索
3.确定搜索树  画出来了。
4.剪枝优化  暂时没想到,觉得也剪不掉,题目思路比较清晰
那就开始第一次尝试
#include<iostream>
没写完,觉得这样写性价比不高,时间很大一部分在这个文档排版上了,不划算。占坑,后面来弄
原文地址:https://www.cnblogs.com/WAsbry/p/13636168.html