利用加权quick-union来进行判断连连看

2024-01-24 22:48

本文主要是介绍利用加权quick-union来进行判断连连看,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码:

package Algorithm;import java.util.Scanner;public class SeriesLook {
/** 连连看进行判断是否连接* 利用加权quick——union来进行判断是否连接* 存储图的是一个二维数组,首先进行初始* 思路:首先要利用qu中的性质来判断是否是相连的,性质则是每两个点之间要先连,则如果是零就要初始值,在构造函数中已经将其初始值了* 		但是进行判断的时候还需要初始值,就是一个点判断是否与隔壁点相连,则需要判断四个点,才可以确认,则我们可以初始值左边,上边,右边* 		然后再判断三个点进行,即为上点与中心点是否为0,左点,右点也是这样。如果满足,则将其进行比较根节点* 		最后输出yes还是no* */private static int[][] data;private static int[][] id;private int[][] num;private int count;public SeriesLook(int N,int M) {//横竖的值count = N;//记录初始值的分量id = new int[N][M];num = new int[N][M];for(int i =0;i<N;i++) {for(int j=0;j<M;j++) if(data[i][j]==0)//如果是0就可以走{id[i][j]=i*100+j;//赋值为原值num[i][j]=1;}}}public int count() {return count;//返回长度}public boolean connected(int p,int q) {return find(p)==find(q);}public int find(int p) {int i = p/100;//获取横坐标int j = p%100;//获取纵坐标while(id[i][j]!=p) {int temp=id[i][j];//下一个节点i = temp/100;j = temp%100;p = temp;}return p;//为最后的根节点}public void union(int p,int q) {//进行判断是否进行创新新节点int i=find(p);//找寻其节点int j = find(q);if(i==j) return ;if(num[i/100][i%100]<num[j/100][j%100]) {//判断谁的子节点多,多的话则将其设为大树id[i/100][i%100]=j;//头节点指向j的头几点num[j/100][j%100]+=num[i/100][i%100];}else {id[j/100][j%100]=i;num[i/100][i%100]+=num[j/100][j%100];}count--;}public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner(System.in);System.out.println("输入n.m");int n = scanner.nextInt();//横坐标int m = scanner.nextInt();//纵坐标System.out.println("输入数据:");data = new int[n][m];for(int i =0;i<n;i++)for(int j=0;j<m;j++)data[i][j]=scanner.nextInt();System.out.println("输入要判断的数值:");int a = scanner.nextInt();int b = scanner.nextInt();int c = scanner.nextInt();int d = scanner.nextInt();data[a][b]= 0;data[c][d] = 0;SeriesLook sl = new SeriesLook(n,m);//初始值,必须两个点来进行判才可以判断是否连接,所以需要初始值for(int i =1;i<m;i++) {//初始值横坐标if(data[0][i]==0&&data[0][i-1]==0) {sl.union(i, i-1);//首行两个点则进行判断}}for(int i =1;i<n;i++) {//纵坐标if(data[i][0]==0&&data[i-1][0]==0) {sl.union(i*100, (i-1)*100);}}for(int i=1;i<n;i++)for(int j=1;j<m;j++) {//上左右比较System.out.println("+"+1%100);if(data[i-1][j]==0&&data[i][j]==0)//上比较sl.union((i-1)*100+j, i*100+j);if(data[i][j-1]==0&&data[i][j]==0)//左比较sl.union(i*100+j-1, i*100+j);}for(int i =0;i<n;i++) {for(int j = 0;j<m;j++) {System.out.print(id[i][j]+" ");}System.out.println();}if(sl.connected(a*100+b, c*100+d))System.out.println("yes");elseSystem.out.println("no");}}

这篇关于利用加权quick-union来进行判断连连看的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho