c语言遍历是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。访问结点所做的操作依赖于具体的应用问题, 具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。遍历是是c语言上进行其它运算之基础。
扩展资料:
由于从给定的某个节点出发,有多个可以前往的下一个节点,所以在顺序计算(即非并行计算)的情况下,只能推迟对某些节点的访问——即以某种方式保存起来以便稍后再访问。常见的做法是采用栈(LIFO)或队列(FIFO)。
由于树本身是一种自我引用(即递归定义)的数据结构,因此很自然也可以用递归方式,或者更准确地说,用corecursion,来实现延迟节点的保存。这时(采用递归的情况)这些节点被保存在call stack中。
思路1:写出所有24种4个数的排列,存到一个数组里,假如数组是P[24][4];
那么可以
for
(i
=
0
i
<
24
i++)
for
(j
=
0
j
<
24
j++)
for
(k
=
0
k
<
24
k++)
三层循环,P[i],P[j],P[k]分别是矩阵的三个列
思路2:
利用dfs递归枚举
int
used[3][4]/*这个数组存放三个列中0~3这四个数是否已在这一列中出现过,需要提前清零*/
int
mat[3][4]/*要枚举的矩阵*/
void
dfs(int
col,
int
row)/*col表示现在已经搜索到哪一列(从0开始编号),row表示这一列已经填了几行*/
{
int
i
if
(col
==
2
&&
row
==
4)
{
....../*运行到这里的时候,mat就是枚举到的一个矩阵*/
return
}
if
(row
==
4)
{row
=
0
col++}
for
(i
=
0
i
<
4
i++)
if
(!used[col][i])
{
used[col][i]
=
1
mat[col][row]
=
i
dfs(col,
row
+
1)
used[col][i]
=
0
}
return
}
调用的时候调用dfs(0,0)