m着色(java)实现

来源:互联网 发布:迅雷赚钱宝三代抢 软件 编辑:程序博客网 时间:2024/06/06 06:38

m着色  问题 的描述不陈述了。


实现也是简单的回朔算法。比较简单。在此将代码贴出来。


写了两个类,一个用来实现 ZhuoShe类,一个用来测试Main。(只在乎实现.没有刻意去在乎命名!!)


zhuoshe类:

public class ZhuoShe {/** * 递归着色的部分是新判断和上一层或上上层的相邻的是不是颜射相同了 * 相同的话  自然就是会朔回去,再去使用四种颜射里德其他的颜射 *  *  */private int collection[]=null;private int tu[][]=null;private int k ;public ZhuoShe(int tu[][],int k ){this.tu = tu ;this.k  = k ;collection  = new int[tu.length];}/** * 图遍历的终点时  到了第n 个节点,  比如现在又n 个板块需要去着色 * 那么  终点就是 到了n  * 在这里要是没有达到 n 我们就需要继续往下面遍历 *  * 往下面遍历的过程中是拿到的是    k 中着色方案吧 *  * 循环k 种着色方案  *   *  并且开始比较方案是不是可行的   就是当时我们约定好的规则 *     *    *       *  只有满足的话 才会继续的往下走 *   *  规律就这样轻松的总结了出来 */public void doZhuoShe(int n ){if(n>=tu.length){for(int i  =0 ;i<collection.length;i++){System.out.print(collection[i]+" ");}System.out.println();}else {for(int i = 0 ; i<k;i++){ if(this.checkTheZhuoSheAnswerIsRight(n, i)){  collection[n]=i; doZhuoShe(n+1); }}}}/** * 在这里我们  从collection 结果中去拿取数据, * 然后比较关系 * 如火热比较也是一个问题 * 首先应该比较的是我们的上一层  但是需要判断是不是和上一层又关系,即连接的关系 * @return */private  boolean checkTheZhuoSheAnswerIsRight(int n ,int color){boolean  result  = true;  //默认是为true 的,发现错误才会被我们修为falsefor(int i = 0  ;  i <  n  ;i++){ //没有必要等于n  因为自己等于自己是没有目的的if(checkTheBlockRelation(n, i)){ //如果是邻接的话 那么我们继续做判断if(checkTheColorIsSame(i,color)){  // 如果发现时邻接的节点而且颜射还是一样的 那我直接返回的是falseresult = false;break;}}}return result;}/** * 这个方法是用来判断  图节点是不是有关系的 方法,其实很简单  只是去查找那个数组对应的位置是不是为1 *  * 单我分开来的目的是让思绪更加的清晰 *   *   a 和b  都是从0 开始的  * @return */private  boolean  checkTheBlockRelation(int a , int b ){boolean  result  = false;if(this.tu[a][b]==1){result  = true ;}else result   = false;return result;}/** * 判断颜射是不是相同的,如果是相同的就返回的是TRUE  否则返回的就是false *  * 判断的方式是直接从collection中拿取数据和现在的做判断啊 * @param a * @param b * @return */private  boolean checkTheColorIsSame(int a,int color){ boolean  result   = false; if(this.collection[a]==color){ result = true; } return result ;}}



Main 类:

public class Main {/** * 在这里我需要的是定义一个   二位的数组,用来保存信息,就是图的信息。 * 因为着色的图可以化作成图的 * @param args */public static void main(String[] args) {//保存的是图的信息int box[][]= {{0,1,1,1,0},{1,0,1,1,1},{1,1,0,1,0},{1,1,1,0,1},{0,1,0,1,0}};     new ZhuoShe(box,4).doZhuoShe(0);}}




----------只供参考学习~~~


原创粉丝点击