CSP认证201312-5 I’m stuck![C++题解]:dfs、两次dfs
生活随笔
收集整理的这篇文章主要介绍了
CSP认证201312-5 I’m stuck![C++题解]:dfs、两次dfs
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 题目解答
- 题目链接
题目解答
来源:acwing
分析:
条件1:可以从起点走到该点。用st1[][]数组表示能否从起点到达该点。
条件2:不可以从该点走到终点。
对于条件2的处理:从终点反向遍历能到达的点,就是所有可以走到终点的点。打上标记,剩下的是满足条件2的点。用st2[][]数组表示能否从终点反向到达该点。
求满足条件1和2的点的数量。
下面是4个方向,用两个数组dx[] 和 dy[]表示。
// 方向dx和dy int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};ac代码
下面对这句代码进行解释:if(check(a,b, i ^ 2)) dfs2(a, b);其中check函数用来检查该点是否可以行走,比如可以上下左右走,可以朝下走等。(a,b)是当前点的坐标,后面的i ^2表示方向,啥方向呢? i表示方向,i ^2表示i的反方向。 这里需要结合上图理解。因为我们的方向是0~3,即i的取值是0 ~ 3。0的反方向是2,1的反方向是3,而i ^2满足什么性质呢? 恰好1和2异或得到3,2和2异或得0,即恰好实现了反方向!!!
题目链接
https://www.acwing.com/problem/content/3199/
总结
以上是生活随笔为你收集整理的CSP认证201312-5 I’m stuck![C++题解]:dfs、两次dfs的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: CSP认证201312-4有趣的数[C+
- 下一篇: CSP认证201403-1相反数[C++