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
  • 相关阅读:
    Winform编程总结2—常用的XML读写
    SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
    SSIS常用的包—发送Email任务
    SSIS常用的包—FTP任务
    Centos 下同时安装 Mysql4 和 Mysql5,二进制方式
    iptables 学习笔记
    em是否到了退出的时候
    CentOs 5.2设置DVD为本地yum源
    WAMP环境配置
    Silverlight学习笔记:布局之stackpanel
  • 原文地址:https://www.cnblogs.com/xiu68/p/7988865.html
Copyright © 2011-2022 走看看