a-p节点的所有路径(leetcode797 golang解法)
func allPathsSourceTarget(graph [][]int) [][]int {
// 前溯法,没有有思路就别写
len2:=len(graph);
path :=make([]int,0);
// 二维数组
res :=make([][]int,0);
// 充分体现其面向过程的特点,实体不是很多
// append函数,在length加一上写
path=append(path,0);
backtracking(path,graph,&res,len2-1)
return res;
}
// 操作这个分片,当成栈和队列使用
// go语言, 禁止写的像java语言
func backtracking(path []int,graph [][]int,res *[][]int,dst int){
start := path[len(path)-1]
if start == dst {
//copy方法不会改变其长度
path2:=make([]int,len(path))
// path一直在变,所以需要拷贝
copy(path2,path)
fmt.Println(path2)
// 二维切片的操作
// 给变量赋值,在函数中是不能改变实参的
// 就像在java中无法修改String,因为每次修改,都是返回新的引用,但是可以使用StringBuffer
*res=append(*res,path2)
return
}
for _,val :=range graph[start]{
path=append(path,val)
// fmt.Println(val)
backtracking(path,graph,res,dst)
// 相对于弹出
path = path[:len(path)-1]
}
}