zoukankan      html  css  js  c++  java
  • 2020-03-08

    庚子鼠年 己卯月 庚戌日

    描述

    今天把七牛云图床解决了,写博客的图片再也不用担心麻烦了

    优化了一下项目

    把前面写的设计模式构建思维导图

    随笔

    js与thymeleaf结合,js获取thymeleaf变量

    <script th:inline="javascript">//一定要加上这句
    [[${msg}]]
    

    性能分析

    package chang.性能测试;
    
    import java.util.Scanner;
    
    
    public class Main {
    
        public static int N;  //n*n矩阵,从0开始计数
        public static int M;  //1-m矩阵 m<=9 填的数据
        public static int[][] arr = new int[9][9];
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            N = sc.nextInt() - 1;
            M = N + 1;
            int k = sc.nextInt();
    
            for (int w = 0; w < k; w++) {
                for (int i = 0; i <= N; i++) {
                    for (int j = 0; j <= N; j++) {
                        arr[i][j]  = sc.nextInt();
                    }
                }
                dfs(0);
            }
        }
    
        public static void dfs(int cut) {
            int n = N + 1 ;
            if(cut==Math.pow(n, 2)) {
                print_arr();
                return;
            }
            //通过cut求出行与列(i,j)
            int i = cut / n;
            int j = cut % n;
    
            //已知条件以读入的数据
            if(arr[i][j] != 0) {
                dfs(cut + 1);
                return;
            }
    
            //arr填入1-M试探
            for(int t = 1;t <= M; t++) {
                if(isColAndRow(i,j,t)&&isGrid(i,j,t)) {
                    arr[i][j] = t;
                    dfs(cut + 1);
                    //回溯
                    arr[i][j] = 0;
                }
            }
        }
    
        /**
         * 打印出结果
         */
        public static void print_arr() {
            for(int i = 0 ;i <= N;i++ ) {
                for(int j = 0;j <= N;j++) {
                    System.out.print(arr[i][j]+"  ");
                }
                System.out.println();
            }
            System.out.println();
        }
    
    
        /**
         * i行j列填入k是否满足条件(仅判断行与列)
         * @param i 测试行
         * @param j 测试列
         * @param k 当前试探值
         * @return 是否满足条件
         */
        public static boolean isColAndRow(int i,int j,int k) {
            //列不变
            for(int p = 0;p <= N ;p++) {
                if(p!=i&&arr[p][j]==k) {
                    return false;
                }
            }
            //行
            for(int p = 0;p <= N ;p++) {
                if(j!=p&&arr[i][p]==k) {
                    return false;
                }
            }
            return true;
        }
        /**
         * 判断在当前块是否满足条件
         * @param i
         * @param j
         * @param k
         * @return
         */
        public static boolean isGrid(int i,int j,int k) {
            int n = N +1;
            if(105%n==0) {
                return true;
            }
            //方块的c行与r列
            int c = 0,r = 0;
            if(n%3==0) {
                c = 3;
                r = n/3;
            }else if(n%2==0) {
                c = 2;
                r = n/2;
            }
    
            //算出具体的格子大小
            c = n / c;
            r = n / r;
            //通过i,j知道在那一个方格中
            int in_c = (i/c)*c;
            int in_r = (j/r)*r;
            for(int p =in_c;p < in_c + c;p++) {
                for(int q = in_r;q < in_r + r;q++) {
                    if(arr[p][q]==k) {
                        if(p==i&&q==j) {
                            continue;
                        }
                        return false;
                    }
                }
    
            }
            return true;
        }
    
    }
    

    这个是上次作业的代码,拿来性能分析一下

    浅拷贝

    // 实现接口 Cloneable
    
    @Override
    	protected User clone() {
            return (User)super.clone();
    	}
    

    深拷贝

    // 实现接口 Cloneable, Serializable	
    //方法一:流方式
    @Override
    	protected User clone() {
    		User cloneObj = null;
    		try {
                //写入字节流
    			//将对象写入流中
    	        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    	        ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
    	        objectOutputStream.writeObject(this);
    	        //从流中取出
    	        ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
    	        ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
                cloneObj = (User) objectInputStream.readObject();
                outputStream.close();
                objectOutputStream.close();
                inputStream.close();
                objectInputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    		return cloneObj;
    //		return (User)super.clone();
    	}
    
    // 方法二
    方式实现里面对象的clone方法,不推荐
    

    提取工具类

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
     
    /**
     * 通过字节流序列化实现深拷贝,需要深拷贝的对象必须实现Serializable接口
     * 
     * @author Administrator
     */
    public class CloneUtils {
    	@SuppressWarnings("unchecked")
    	public static <T extends Serializable> T clone(T obj) {
    		T cloneObj = null;
    		try {
    			// 写入字节流
    			ByteArrayOutputStream out = new ByteArrayOutputStream();
    			ObjectOutputStream obs = new ObjectOutputStream(out);
    			obs.writeObject(obj);
    			obs.close();
     
    			// 分配内存,写入原始对象,生成新对象
    			ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
    			ObjectInputStream ois = new ObjectInputStream(ios);
    			// 返回生成的新对象
    			cloneObj = (T) ois.readObject();
    			ois.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return cloneObj;
    	}
    }
    
  • 相关阅读:
    十大编程算法助程序员走上高手之路
    软件流程图规范
    统一软件开发过程(rup)理解
    Java 数组基础
    软件开发生命周期模型 瀑布模型、增量模型、原型模型、螺旋模型、喷泉模型总结
    UML(5)——协作图
    时序图、活动图、状态图、协作图的区别
    面向对象分析设计-------02UML+UML各种图形及作用
    ExecutorService的十个使用技巧
    使用guava带来的方便
  • 原文地址:https://www.cnblogs.com/chang1024/p/12445123.html
Copyright © 2011-2022 走看看