.NET刷算法如何应用于优化?

摘要:# BFS模板-宽度优先搜索(Breadth First Search) ## 1.模板 ````C# BFS遍历 开始节点目标节点public int BFS(Node start, N
BFS模板-宽度优先搜索(Breadth First Search) 1.模板 /// <summary> /// BFS遍历 /// </summary> /// <param name="start">开始节点</param> /// <param name="target">目标节点</param> /// <returns></returns> public int BFS(Node start, Node target) { //利用队列先进先出(FIFO)的特点 Queue<Node> que = new Queue<Node>(); HashSet<Node> visited = new HashSet<Node>(); //避免走回头路 int leval = 0; // 记录遍历的层数 if (start != null) { que.Enqueue(start); //将起点加入队列 visited.Add(start); } while (que.Count > 0) { int len = que.Count; //当前层中的所有节点 for (int i = 0; i < len; i++) { Node cur = que.Dequeue(); /* 划重点:这里判断是否到达终点 */ if (cur == target) return leval; /* 将 cur 的下一层子节点加入队列 */ foreach (Node x in cur.childList) { if (!visited.Contains(x)) { que.Enqueue(x); visited.Add(x); } } } /* 划重点:更新步数在这里 */ leval++; } return leval; } 2.推荐题目 https://leetcode.cn/problems/binary-tree-level-order-traversal/ https://leetcode.cn/problems/minimum-depth-of-binary-tree/ https://leetcode.cn/problems/open-the-lock/ 回溯模板 通用模板 List<List<T>> res = new List<List<T>>(); List<T> path = new List<T>(); public void Backtracking(入参) { if (满足结束条件) { result.add(路径); return; } for (选择 in 选择列表) { 做选择 backtrack(路径, 选择列表) 撤销选择 } } 无论是排列、组合还是子集问题,简单说无非就是让你从序列 nums 中以给定规则取若干元素 1. 元素无重不可复选 元素无重不可复选,即 nums 中的元素都是唯一的,每个元素最多只能被使用一次,这也是最基本的形式 组合、分割、子集 //问题:输入一个无重复元素的数组 nums,其中每个元素最多使用一次,请你返回 nums 的所有子集 List<List<int>> res = new List<List<int>>(); List<int> path = new List<int>(); public List<List<int>> Subsets(int[] nums) { BackTrac
阅读全文