本周博客总结

 

 

感受颇深的几个题:

 

1135 奇怪的电梯

广搜

难点:

 

自己定义一个队列元素的类型,QElement为结构类型,使用typedef可以定义一个新的类型名称,在程序中QElement就像int、float一样,作为一个数据类型的名称使用:

typedef struct {

    int floor;  //当前所处的楼层编号

    int pushcount;  //到达该楼层所经历的步数(按按钮次数)

} QElement;

 

定义队列的时候:

queue<QElement> q; //定义元素类型为QElement的队列q。

 

 

1219八皇后

这是一道深搜回溯题,进一步搜索后要清除这一步的标记回到上一步,

 

难点:

每个皇后占领八个直线方向的格子,横竖的格子容易标记。

题解中给出c[i+j]表示左下到右上

d[i-j+n]表示左上到右下这种方法很巧妙,是我一开始想不到的。

 

1118

难点:

已知杨辉三角的高度n,用这种数组a[]储存最后一排:

a[0]=a[n-1]=1; //杨辉三角性质,两边都是1

    if (n>1)

        for (int i=1;i*2<n;i++)

            pc[i]=pc[n-1-i]=(n-i)*pc[i-1]/i;

这个方法太妙了,我想不出原理,但是每个数竟然都能算对!

 

剪枝:

如过排列前面的数的和已经超过了sum,这种情况就要直接舍弃;

 

我自己动手做时遇到的问题:

我在写递归的时候总是不知道该在哪里走向下一个步,递归函数也不知道应该把哪些变量设置参数,我能理解题解给的思路方法,自己不会写递归。

 

2196 挖地雷

题目表述没有说明白是通道单向的导致我看了半天没能理解题目。

深搜

这道题也用到了回溯,挖到无路可走的情况就和ans比较,大的话就赋值给ans,

难点:

1.利用bool类型的二维数组储存地窖之间的通道,这是我没想到的,a[2][3]=1表示从二号到三号之间有一个单向通道

2.搜索函数的参数是(现在的位置,走过的总点数,地雷总数)

主函数中输入的参数是(假设从i开始走,1,i处地雷数)

 

1294 高手散步

难点:

裸的邻接矩阵存储

存储双向的路经:s[a][b]=s[b][a];

思路:

将每个景点都当作初始位置开始深搜(同时这个初始位置记录为搜索过),一直遍历到无路可走(再用max函数判断ans是否更新)

 

收获:

深搜可以和哪些知识结合:

二叉树,

并查集:奶酪题中遇到

 

 

小想法:

搜索函数都是先判断条件(是否遍历到头,是否更新ans,是否还有路可走,根据题目条件而设计的剪枝)再判断向下一步怎么走

回溯一般是在函数调用自身之后,把当前步数的状态清空

用合适的容器存放每一步的状态非常重要,有些情况我们可以巧妙使用二维数组、结构体struct

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值