首页 > 其他分享 >2023-04-01 图论问题建模和floodfill

2023-04-01 图论问题建模和floodfill

时间:2023-04-01 22:02:07浏览次数:56  
标签:图论 01 04 建模 DFS 二维 floodfill 分量

图论问题建模和floodfill

floodfill(洪泛)实际就是图的遍历

1 图论问题例子:判断二分图

题目来源:LeetCode 785 is-graph-bipartite:,判断二分图,

因为题目中已经给出了邻接表,相当于已经给出了Graph,所以直接用二分图的核心算法即可,参考DFS实现二分图检测

2 图的建模和二维网格中的小技巧

核心是为了解决LeetCode 695.岛屿的最大面积,本节和下一节先用图建模和DFS来解决,4开始会提取成更为常用floodfill算法(洪泛,类似洪水向四周蔓延)

695.岛屿的最大面积 建模成图论问题,转化成求所有连通分量里元素最多的一个,返回其元素个数即可, 需要把平面中二维的点映射成一维的点,然后就可以用检测连通分量那套来做这个问题了

图论建模

二维点和一维的转换,然后就可以利用图论的标准实现来解决当前问题了

![二维点和一维的转二维点和一维的转换通分量(上右下左四个点的矢量差,顺时针旋转)
图中使用的坐标系是屏幕坐标系,不是笛卡尔坐标系的(x, y)而是(行, 列)。四连通分量就是在当前的(行, 列)坐标上加上四联通分量得到的点就是四联通分量要找的点,如图中(2, 1)代表第3行第2列(下标从0开始)的点,(1, 1)、(2, 2)、(3, 1)、(2, 0)分别对应(2, 1)加上四联通分量后对应的点,其实就是(2, 1)的上、右、下、左(顺时针转一下即可)对应的点。下面的伪代码说明了怎么获取上右下左四个点的坐标。此外八联通有时也会用到,就是指当前点为中心的九宫格以外的其他8个点,可以用类似的方法进行表示(顺时针旋转,试试列出八联通的dirs)
![四联通分量](i四联通分量通情况下的 dirs 数组定义

在八连通的情况下,dirs 数组应该是 8*2 的二维数组,具体如下:

int[][] dirs = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};

请在纸笔上模拟,看看能不能理解,数组中的每一个元素(包含两个坐标的位移偏差),代表一个坐标位置对应的哪个相邻位置的坐标?

3 DFS实现解决floodfill的问题

通过构造图和使用DFS来解决洪泛问题

4 Floodfill算法

实际就是把原来基于整数的图遍历扩展到了基于二维坐标系的图遍历,二维坐标系中的每个像素点都是图中的一个顶点。

上一节做了大量的构建基于整数顶点的图并进行了大量二维坐标到整数的转换,从而可以使用前面写好地DFS代码,

实际是可以直接用(x, y)来表达图的顶点了,而且也不需要显示地构建图了,只需要利用骄傲DFS或BFS的思想即可

5 更多floodfill的问题

标签:图论,01,04,建模,DFS,二维,floodfill,分量
From: https://www.cnblogs.com/lsgwr/p/17279496.html

相关文章

  • 《花雕学AI》04:尝鲜功能丰富且容易上手的AI绘画工具——Leonardo AI
    偶然机缘,我接触到了另外一个AI绘画平台:Leonardo.AI  它是一个新的AI图像平台,其输出质量可与目前最火的Midjourney相媲美,当然差距还是有的。其链接是https://leonardo.ai/,界面如下图。我填写了电邮地址,申请试用的资格,后来,就没有下文了,呵呵......然后,使用谷歌账号,居然......
  • 英语背单词 专四词汇 202304 ChatGPT
    英语背单词专四词汇202302以及202303ChatGPT-ChuckLu-博客园(cnblogs.com)2023-04-01Explainthemeaningofthefollowingwordsalongwithindexandphoneticsymbol:crusade,scandal,jack,peril,optimism,anchor,burial,jerk,erase,bother,sardine,album......
  • 【月伴流星】Win10+Win11 22h2 专业精简版合集2023.04(速度贼快)
     本精简版为重度精简,不支持更新!删除了所有WinSxS内的组件硬链接,使WinSxS的体积由原来的的6G一下子缩小到60M左右,完全丧失了组件恢复功能,相当于删除了组件备份!而保留的下来组件完全不受影响均可正常使用!------------------------------------------系统为Win10+Win11精简专业版合......
  • 下载并安装matlab2018
    欢迎来到我的友链小屋下载链接:链接:https://pan.baidu.com/s/1zo_8g0iqWxEwbNa9-FesFw 提取码:4r1w 百度网盘vip:在拼多多搜索百度网盘一天vip 安装流程:http://www.zhanshaoyi.com/8567.html......
  • 代码随想录Day17-Leetcode110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和
    110.平衡二叉树题目链接:https://leetcode.cn/problems/balanced-binary-tree/一个显然但似乎不太高效的方法是:通过递归获取左右子树高度,判断差;然后递归判断左右结点;那么一个显然的改进就是后序遍历/***Definitionforabinarytreenode.*functionTreeNode(val......
  • 2018icpc青岛F . Tournament
    题目链接:https://codeforces.com/gym/104270/problem/F题意:有n个武士,编号1~n,要进行k轮比赛,每轮比赛中所有武士都要出现,然后两名武士之间会发生决斗,并且一名武士在一轮比赛中只会与另外一名武士决斗,发生决斗的这两名武士,在其他轮比赛中,将不会再次决斗。问能否构造出来符合题......
  • P4688 [Ynoi2016] 掉进兔子洞
    RE了大约12次以后,SoN3ri告诉我是bitset开小了。那你为什么全RE了啊(?题意是给你一个长度为\(n\)的序列,一共\(m\)次询问,每次询问包含三个区间,求三个区间内相同的数去掉后剩下的数的个数。做完了小清新人渣的本愿,看啥都是bitset+莫队,这题我也是一开始打了一个莫队+bitset,但是......
  • 2023-04-01-队链LinkQueue的基本操作
    //队链#include<stdio.h>#include<malloc.h>#include<stdbool.h>typedefstructLinkNode//定义队链结点{intdata;structLinkNode*next;}LinkNode;typedefstruct{LinkNode*front,*rear;}*LinkQueue;voidinitLinkQueue(L......
  • day11| 20.有效的括号;150.逆波兰表达式求值;1047.删除字符串中的所有相邻重复项
    20.有效的括号 题目简述:给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。 思路:1.利用一个栈实现2.构建一个字典,键......
  • 数据库应用2023-04-01
     indexvsfulltextindexinmysqlInMySQL,anindexisadatastructurethatimprovesthespeedofdataretrievaloperationsonatable.Itworksbyallowingthedatabasetofindandretrievespecificrowsmorequickly,byreducingtheamountofdatath......