% Copyright (c) 2014,2016 Casper Ti. Vector % Public domain. \chapter{基于深度优先搜索算法计算过渡矩阵} 两种最常见的树搜索算法是广度优先搜索(BFS)和深度优先搜索(DFS). 在此, 我们推荐深度优先搜索, 因为它可以通过编写递归代码简单实现. 给定一个顶点$\bm x_{v}$和一个代表单元$K_{r_{0}} \in \mathcal{M}_{v}$, 我们需要一些初始化设置. 令$\mathbb{T}_{r_{0},r_{0}} = \mathbb{I}_{3}$, 令$\mathscr{V}$表示长度为$N_C$的标签数组, 用于标记已访问过的单元. 标签数组初始值设置为\texttt{false}. 以下算法是基于深度优先搜索算法\parencite{algorithmbook}计算过渡矩阵. 使用以下算法可以获得等式\eqref{ch2:eq:finalgradrelation}中的$\mathbb{T}_{i,r_{0}} (i=1,2,\cdots,N_{C})$. \begin{algorithm} \caption{基于深度优先搜索计算过渡矩阵的算法} \label{alg:dft} \begin{algorithmic}[1] \Procedure{T}{$G_{v}$} \State $\mathbb{T}_{r_{0},r_{0}} \gets \mathbb{I}_{3}$ \For{$i \gets 1, N_{C}$} \State $\mathscr{V}_{i} \gets \texttt{false}$ \EndFor \State DFS($r_{0}$) \EndProcedure \Statex \Procedure{DFS}{$i$}\Comment{输入整数$i$, 表示单元$K_{i} \in \mathcal{M}_{v}$} \State $\mathscr{V}_{i} \gets \texttt{false}$ \ForAll {$K_{l} \in \mathcal{M}_{v}$} \If {$K_{i}$与$K_{l}$有公共面且$\mathscr{V}_{l} = \texttt{false}$} \State 通过\eqref{ch2:eq:gradtransexp}计算关于单元$K_{l}, K_{i} \in \mathcal{M}_{v}$的过渡矩阵$\mathbb{T}_{l,i}$ \State $\mathbb{T}_{l,r_{0}} \gets \mathbb{T}_{l,i}\mathbb{T}_{i,r_{0}}$ \State DFS($l$)\Comment{使用整数$l$递归调用DFS} \EndIf \EndFor \EndProcedure \end{algorithmic} \end{algorithm} % vim:ts=4:sw=4