如何查看vs中建设好的网站企业文化展厅设计
2026/5/21 20:50:48 网站建设 项目流程
如何查看vs中建设好的网站,企业文化展厅设计,微信小程序注册代码,岳阳网警一、深度搜索dfs和广度搜索bfsdfs是可一个方向去搜#xff0c;不到黄河不回头#xff0c;直到遇到绝境了#xff0c;搜不下去了#xff0c;再换方向#xff08;换方向的过程就涉及到了回溯#xff09;。bfs是先把本节点所连接的所有节点遍历一遍#xff0c;走到下一个节…一、深度搜索dfs和广度搜索bfsdfs是可一个方向去搜不到黄河不回头直到遇到绝境了搜不下去了再换方向换方向的过程就涉及到了回溯。bfs是先把本节点所连接的所有节点遍历一遍走到下一个节点的时候再把连接节点的所有节点遍历一遍搜索方向更像是广度四面八方的搜索过程。问“最短” → BFS问“有没有环” → DFS问“连通区域” → DFS问“是否能到达” → BFS/DFS 都行多源同时扩散 → 多源 BFS要找所有路径/组合 → DFS1.BFS模板q.add(start)while(q非空):遍历当前层扩散到下一层以腐烂的橘子为例多源// 固定方向数组如果是网格 BFS int[][] dirs {{1,0},{-1,0},{0,1},{0,-1}}; // 固定队列结构 Queueint[] q new LinkedList(); // 可变根据题意加入起点单源 BFS 只有一个 q.offer(new int[]{startX, startY}); // 固定标记 visited防止重复访问 boolean[][] vis new boolean[m][n]; vis[startX][startY] true; // 固定开始 BFS 四层模板 int steps 0; while (!q.isEmpty()) { // 固定按层遍历求最短步数必需 int size q.size(); while (size-- 0) { // 固定取出队头 int[] cur q.poll(); int x cur[0], y cur[1]; // 可变题意相关逻辑例如判断是否到达目标 // if (grid[x][y] TARGET) return steps; // 固定扩散到四个方向 for (int[] d : dirs) { int nx x d[0]; int ny y d[1]; // 可变边界条件、障碍条件、题目特判 if (nx 0 || nx m || ny 0 || ny n) continue; if (vis[nx][ny]) continue; // if (grid[nx][ny] #) continue; // 按题意定义障碍 // 固定入队 标记访问 vis[nx][ny] true; q.offer(new int[]{nx, ny}); } } // 固定每扩散一层 steps steps; }固定步骤1.新建队列2.visit数组防重复访问3.层序遍历框架int size q.size(); while (size-- 0) { ... } steps;4.四个方向扩散需要根据题目改变的地方1. 初始入队的点单源 / 多源2. 访问条件比如边界grid[x][y] 0/1/2不能访问障碍可以访问某个点3. 到达目标时的处理4. 返回值含义最短步数 or 是否可达 or 最大层数如果是单源那么就直接把这个点入队就行q.offer(new int[]{startX, startY}); vis[startX][startY] true;如果是多源那么就要for循环遍历所有的点for (int[] src : sources) { q.offer(src); vis[src[0]][src[1]] true; }2.DFS模板岛屿数量dfs(x):if(不能继续) return标记访问dfs(邻居)void dfs(int x, int y) { // 可变越界判断 / 终止条件 if (x 0 || x m || y 0 || y n) return; if (grid[x][y] ! 1) return; // 固定标记为已访问 grid[x][y] 2; // 或 vis[x][y] true // 固定四方向递归 DFS dfs(x 1, y); dfs(x - 1, y); dfs(x, y 1); dfs(x, y - 1); }固定步骤1. 函数结构传坐标/节点2. 递归调用自身3. 标记访问需要根据题目改变的地方1. 终止条件根据题目不同越界遇到障碍遇到已访问过的点符合某个条件停止2. 标记方式3. 图的结构 网格四方向树图邻接表4. 返回值图的结构树void dfs(TreeNode root) { if (root null) return; dfs(root.left); dfs(root.right); }图检测环boolean dfs(int x) { if (color[x] 1) return true; // 找到环 if (color[x] 2) return false; color[x] 1; for (int y : g[x]) { if (dfs(y)) return true; } color[x] 2; return false; }二、拓扑排序课程表public int[] topoSort(int numCourses, int[][] prerequisites) { // 固定构造图的邻接表 ListInteger[] g new ArrayList[numCourses]; Arrays.setAll(g, i - new ArrayList()); // 固定统计所有节点的入度 indegree[] int[] indegree new int[numCourses]; // 可变根据题目加入边信息 // prerequisites[i] {a, b} 意味 b - a for (int[] p : prerequisites) { int a p[0], b p[1]; g[b].add(a); indegree[a]; } // 固定队列存储所有入度为 0 的节点 QueueInteger q new LinkedList(); for (int i 0; i numCourses; i) { if (indegree[i] 0) q.offer(i); } // 固定拓扑序存放结果 int[] order new int[numCourses]; int idx 0; // 固定BFS 弹出入度为 0 的点并降低邻接点入度 while (!q.isEmpty()) { int x q.poll(); order[idx] x; for (int y : g[x]) { indegree[y]--; if (indegree[y] 0) q.offer(y); } } // 可变根据题意返回不同的内容 // 这里如果 idx numCourses 说明有环无法完成 if (idx numCourses) return new int[0]; // 有环 return order; }固定步骤1.构造邻接表2. indegree 数组3.入度为 0 进队列4.队列 BFS5.拉出节点 → 降低其邻接节点的入度6.入度减到 0 再进队列需要根据题目改变的地方1.边方向先干嘛后干嘛2.返回内容三、前缀树从二叉树到多叉树以实现Trie前缀树为例class Trie { private static class Node { Node[] son new Node[26]; // 固定表示 26 个字母 boolean end; // 固定这个节点是否是某个单词的结尾 } private final Node root new Node(); // 固定根节点 // 插入单词固定模板 public void insert(String word) { Node cur root; for (char c : word.toCharArray()) { c - a; if (cur.son[c] null) { cur.son[c] new Node(); } cur cur.son[c]; } cur.end true; } // 查找完整单词固定模板 public boolean search(String word) { Node t find(word); return t ! null t.end; } // 查找前缀固定模板 public boolean startsWith(String prefix) { return find(prefix) ! null; } // 根据字符串找到最后一个节点核心固定 private Node find(String word) { Node cur root; for (char c : word.toCharArray()) { c - a; if (cur.son[c] null) return null; cur cur.son[c]; } return cur; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询