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++