图论题总结

2024-09-03 20:36
文章标签 总结 论题

本文主要是介绍图论题总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图论总结

  • hot100
    • 岛屿数量
    • 腐烂的橘子
    • 课程表
    • 实现 Trie (前缀树)

hot100

岛屿数量

题目链接:
200.岛屿数量
代码:

class Solution {boolean[][] visited;int[][] move = {{0,1},{0,-1},{1,0},{-1,0}};public void bfs(char[][] grid, int i, int j){Queue<int[]> deque = new LinkedList<>();deque.offer(new int[]{i,j});visited[i][j] = true;while(!deque.isEmpty()){int[] curr = deque.poll();int m = curr[0];int n = curr[1];for (int index = 0; index < 4; index ++){int nexti = m + move[index][0];int nextj = n + move[index][1];if (nexti < 0 || nexti >= grid.length || nextj < 0 || nextj >= grid[0].length) continue;if (!visited[nexti][nextj] && grid[nexti][nextj] == '1'){deque.offer(new int[]{nexti,nextj});visited[nexti][nextj] = true;}}} }public int numIslands(char[][] grid) {int res = 0;visited = new boolean[grid.length][grid[0].length];for (int i = 0; i < grid.length; i ++){for (int j = 0; j < grid[0].length; j ++){if (grid[i][j] == '1' && !visited[i][j]){res ++;bfs(grid,i,j);}}}return res;}
}

腐烂的橘子

题目链接:
994.腐烂的橘子
代码:

class Solution {int[][] move = {{0,1},{0,-1},{1,0},{-1,0}};public int orangesRotting(int[][] grid) {int row = grid.length, col = grid[0].length;Queue<int[]> queue = new LinkedList<>();Map<int[], Integer> depth = new HashMap<>();for (int r = 0; r < row; r ++) {for (int c = 0; c < col; c ++) {if (grid[r][c] == 2) {int[] code = new int[]{r,c};queue.offer(code);depth.put(code, 0);}}}int ans = 0;while (!queue.isEmpty()) {int[] curr = queue.poll();int m = curr[0];int n = curr[1];for (int k = 0; k < 4; k ++) {int next_m = m + move[k][0];int next_n = n + move[k][1];if (0 <= next_m && next_m < row && 0 <= next_n && next_n < col && grid[next_m][next_n] == 1) {grid[next_m][next_n] = 2;int[] next_code = new int[]{next_m,next_n};queue.offer(next_code);depth.put(next_code, depth.get(curr) + 1);ans = depth.get(next_code);}}}for (int r = 0; r < row; r ++) {for (int c = 0; c < col; c ++) {if (grid[r][c] == 1) {return -1;}}}return ans;}
}

课程表

题目链接:
207.课程表
代码:

class Solution {List<List<Integer>> edges;boolean valid = true;int[] visited;public void dfs(int i){visited[i] = 1;for (int edge:edges.get(i)){if (visited[edge] == 0){dfs(edge);if (! valid) return;}else if (visited[edge] == 1){valid = false;return;}}visited[i] = 2;}public boolean canFinish(int numCourses, int[][] prerequisites) {edges = new ArrayList<>();for (int i = 0; i < numCourses; i ++){edges.add(new ArrayList<>());}for (int[] item : prerequisites){edges.get(item[1]).add(item[0]);}visited = new int[numCourses];for (int i = 0; i < numCourses; i ++){if (visited[i] == 0){dfs(i);}}return valid;}
}

实现 Trie (前缀树)

题目链接:
208.实现 Trie (前缀树)
代码:

class Trie {private Trie[] children;private boolean isEnd;public Trie() {children = new Trie[26];isEnd = false;}private Trie searchPrefix(String prefix){Trie node = this;for (int i = 0; i < prefix.length(); i ++){char c = prefix.charAt(i);int index = c - 'a';if (node.children[index] == null) return null;node = node.children[index];}return node;}public void insert(String word) {Trie node = this;for (int i = 0; i < word.length(); i ++){char c = word.charAt(i);int index = c - 'a';if (node.children[index] == null){node.children[index] = new Trie();}node = node.children[index];}node.isEnd = true;}public boolean search(String word) {Trie node = searchPrefix(word);return node != null && node.isEnd;}public boolean startsWith(String prefix) {return searchPrefix(prefix) != null;}
}

这篇关于图论题总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133984

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

暑期学习总结

iOS学习 前言无限轮播图换头像网络请求按钮的configuration属性总结 前言 经过暑期培训,完成了五个项目的仿写,在项目中将零散的内容经过实践学习,有了不少收获,因此来总结一下比较重要的内容。 无限轮播图 这是写项目的第一个难点,在很多项目中都有使用,越写越熟练。 原理为制造两个假页,在首和尾分别制作最后一页和第一页的假页,当移动到假页时,使用取消动画的方式跳到