我正在尝试如上所述。我已经相对轻松地设计了广度优先搜索。
该脚本的目标是创建用户输入的特定深度和广度的目录结构。我正在尝试改变我的广度优先实现以支持深度优先搜索。这是我得到的地方:
depthsearch(){
local open=("seed")
local tmpopen=()
local closed=()
local x="seed"
for((j=0;j<$depth;j++)); do
for x in "${open[@]}" ; do
for ((i=0;i<$breadth;i++)); do
tmpopen=("${tmpopen[@]}" "$x/$i")
mkdir echo "$x/$i"
done
open=("${tmpopen[@]}" "${open[@]:1}")
tmpopen=()
closed=("${closed[@]}" "$x")
done
tmpopen=()
done
}
好的,所以我稍微减少了我的问题。显然问题是我没有按索引进行迭代,所以我在迭代时无法更新循环。但是,我无法弄清楚如何通过索引进行迭代并更新我的数组,以便我可以首先构建我的目录深度。任何一个例子将不胜感激。
答案 0 :(得分:1)
如果使用数据结构不是严格必要,您可以通过简单的回忆来完成:
#!/bin/bash
depth=4
breadth=3
node_id=0 #for testing, increments +1 each time a folder is created.
# args: level( [0,depth) ), childNo ( [0,breadth) )
generateTreeDFS(){
declare -i level=$1
declare -i childNo=$2
declare -i i=0
if (( $level < $depth ));then
mkdir "n_$childNo-$node_id"
cd "n_$childNo-$node_id"
let node_id++
let level++
while [ $i -lt $breadth ]
do
generateTreeDFS $level $i
let i++
done
cd ..
fi
}
如果我们打电话
generateTreeDFS 0 0
目录结构如下:
$ tree .
.
├── depthsearch.sh
└── n_0-0
├── n_0-1
│ ├── n_0-2
│ │ ├── n_0-3
│ │ ├── n_1-4
│ │ └── n_2-5
│ ├── n_1-6
│ │ ├── n_0-7
│ │ ├── n_1-8
│ │ └── n_2-9
│ └── n_2-10
│ ├── n_0-11
│ ├── n_1-12
│ └── n_2-13
├── n_1-14
│ ├── n_0-15
│ │ ├── n_0-16
│ │ ├── n_1-17
│ │ └── n_2-18
│ ├── n_1-19
│ │ ├── n_0-20
│ │ ├── n_1-21
│ │ └── n_2-22
│ └── n_2-23
│ ├── n_0-24
│ ├── n_1-25
│ └── n_2-26
└── n_2-27
├── n_0-28
│ ├── n_0-29
│ ├── n_1-30
│ └── n_2-31
├── n_1-32
│ ├── n_0-33
│ ├── n_1-34
│ └── n_2-35
└── n_2-36
├── n_0-37
├── n_1-38
└── n_2-39