zoukankan      html  css  js  c++  java
  • Ex 5_26 变量约束是否能同时满足(并查集)_第九次作业

    利用并查集进行处理,定义一个维护数组components,components[i]表示变量序号为i的变量所处的集合,首先处理相等的变量,把它们放入同一个集合中,最后再处理不相等变量,若两个不相等的变量处于同一个集合中,则不满足约束条件。

     1 package org.xiu68.ch05.ex9;
     2 
     3 public class Ex5_26 {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         //变量约束集合,先给出相等约束,再给出不相等约束
     8         Constraint[] constraint=new Constraint[]{
     9             new Constraint(0,1,true),    
    10             new Constraint(1,2,true),    
    11             new Constraint(3,4,true),    
    12             new Constraint(4,5,true),
    13             new Constraint(2,3,true),
    14             new Constraint(0,5,false)
    15         };
    16         checkConstraint(6, constraint);   //约束不能同时满足
    17     }
    18     
    19     //varNum:变量的个数
    20     //constraint:变量约束集合
    21     public static void checkConstraint(int varNum,Constraint[] constraint){
    22         
    23         int[] components=new int[varNum];    //并查集
    24         for(int i=0;i<varNum;i++)
    25             components[i]=i;
    26         
    27         boolean isConstraint=true;
    28         for(int i=0;i<constraint.length;i++){
    29             int v1=constraint[i].value1;
    30             int v2=constraint[i].value2;
    31             //变量相等,放入同一个并查集中
    32             if(constraint[i].isEqual==true){
    33                 for(int j=0;j<components.length;j++){
    34                     if(components[j]==v2)
    35                         components[j]=components[v1];
    36                 }
    37             }else{
    38                 //变量不相等且位于同一个并查集中,则不满足约束条件
    39                 if(components[v1]==components[v2]){
    40                     System.out.println("约束不能同时满足");
    41                     isConstraint=false;
    42                     break;
    43                 }
    44             }
    45         }
    46         if(isConstraint==true)
    47             System.out.println("约束能同时满足");
    48     }
    49 }
    50 
    51 class Constraint{
    52     public int    value1;        //第value1个变量
    53     public int  value2;        //第value2个变量
    54     public boolean isEqual;    //是否相等
    55     
    56     public Constraint(int value1, int value2, boolean isEqual) {
    57         super();
    58         this.value1 = value1;
    59         this.value2 = value2;
    60         this.isEqual = isEqual;
    61     }
    62 }
    View Code
  • 相关阅读:
    四,redis6版本的使用部署
    记录篇-浪潮服务器raid卡
    sudo漏洞解决方案--源码转rpm包(spec文件编写)
    关闭 Chrome 浏览器阅读清单功能
    【转译】如何成为一个数据工程师?
    Python 用最小堆获取大量元素 topk 大个元素
    Python 实现二分查找
    Python 排序算法之堆排序,使用 heapq 实现
    Python 排序算法之归并排序
    Python 排序算法之快速排序
  • 原文地址:https://www.cnblogs.com/xiu68/p/7988865.html
Copyright © 2011-2022 走看看