Chrome浏览器kiosk模式下,退出的方法

Chrome浏览器的kiosk模式真乃神器 可以方便的开发基于HTML5的展示型全屏系统 一般人根本不知道是运行的HTML应用 该模式下,只有按Alt+F4或者Ctrl+W才能退出应用 但对于触摸屏(无键盘)场景下有些困难 这就要求在HTML中加上关闭功能 令人吃惊的是`javascript:window.close()`在kiosk模式下居然也不起作用 经过百般搜索,终于发现了一个chrome插件可以解决此问题 [Close Kiosk 插件地址](https://chrome.google.com/webstore/detail/close-kiosk/dfbjahmenldfpkokepmfmkjkhdjelmkb) 现在Chrome插件必须Store上在线安装 如果你的展柜机台没有网络环境 又或者Chrome Stroe上哪一天这个插件下架了 又或者哪天翻不了墙了就糟糕了 百度搜索「[Chrome 插件导出](https://jingyan.baidu.com/article/9158e0004ff9bba25512284d.html)」 将其导出为CRX文件,再到其他电脑上,打开chrome拖入即可,我这边备份了一个,可供下载 [下载地址](https://files.hexcode.cn/c92adb65-359b-4499-9ba4-f6a0bd4af652.crx) 安装到Chrome以后,在HTML中只要打开的URL包含closekiosk字符串,这个插件就能将Chrome关闭,达到退出的效果。

八皇后极限编程

这几天,准确来说是连续4天了
真的能称之为极限编程了
关于N皇后算法的极限挑战,最终很满意
代码使用了“一维棋盘”,“对称剪枝”,“递归回溯”,“多线程”等特色
最终结果:
15皇后,用时:4903毫秒,计算结果:2279184
16皇后,用时:33265毫秒,计算结果:14772512
17皇后,用时:267460毫秒,计算结果:95815104

比起我第一天写N皇后,14皇后用时87秒的成绩,提高太多了!!!
说好的一定要在100秒内解16皇后,终于解脱了
啥都不说了,贴上代码和运算成绩

package com.newflypig.eightqueen;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class EightQueen7 {
    private static final short K=8;     //使用常量来定义,方便之后解N皇后问题
    private static short N=0;

    public static void main(String[] args) throws Exception {
        for(N=9;N<=17;N++){
            long count=0;
            Date begin =new Date();
            /**
             * 初始化棋盘,使用一维数组存放棋盘信息
             * chess[n]=X:表示第n行X列有一个皇后
             */

            List<short[]> chessList=new ArrayList<short[]>(N);
            for(short i=0;i<N;i++){
                short chess[]=new short[N];
                chess[0]=i;
                chessList.add(chess);
            }

            short taskSize =(short)( N/2+(N%2==1?1:0) );
            // 创建一个线程池
            ExecutorService pool = Executors.newFixedThreadPool(taskSize);
            // 创建多个有返回值的任务
            List<Future<Long>> futureList = new ArrayList<Future<Long>>(taskSize);
            for (int i = 0; i < taskSize; i++) {
                Callable<Long> c = new EightQueenThread(chessList.get(i));
                // 执行任务并获取Future对象
                Future<Long> f = pool.submit(c);
                futureList.add(f);
            }
            // 关闭线程池
            pool.shutdown();

            for(short i=0; i<(short) (taskSize - (N%2==1?1:0)); i++){              
                count+=futureList.get(i).get();
            }
            count=count*2;
            if(N%2==1)
                count+=futureList.get(N/2).get();

            Date end =new Date();
            System.out.println("解决 " +N+ "皇后问题,用时:" +String.valueOf(end.getTime()-begin.getTime())+ "毫秒,计算结果:"+count);
        }
    }
}

class EightQueenThread implements Callable<Long>{
    private short[] chess;
    private short N;

    public EightQueenThread(short[] chess){
        this.chess=chess;
        this.N=(short) chess.length;
    }


    @Override
    public Long call() throws Exception {
        return putQueenAtRow(chess, (short)1) ;
    }


    private Long putQueenAtRow(short[] chess, short row) {
        if(row==N){
            return (long) 1;
        }

        short[] chessTemp=chess.clone();
        long sum=0;
        /**
         * 向这一行的每一个位置尝试排放皇后
         * 然后检测状态,如果安全则继续执行递归函数摆放下一行皇后
         */
        for(short i=0;i<N;i++){
            //摆放这一行的皇后
            chessTemp[row]=i;

            if( isSafety( chessTemp,row,i) ){
                sum+=putQueenAtRow(chessTemp,(short) (row+1));
            }
        }

        return sum;
    }

    private static boolean isSafety(short[] chess,short row,short col) {
        //判断中上、左上、右上是否安全
        short step=1;
        for(short i=(short) (row-1);i>=0;i--){
            if(chess[i]==col)   //中上
                return false;
            if(chess[i]==col-step)  //左上
                return false;
            if(chess[i]==col+step)  //右上
                return false;

            step++;
        }

        return true;
    }
}


这是四天前的成绩:

确实有了很大的提升!

丁丁生于 1987.07.01 ,30岁,英文ID:newflydd

  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • Git OSChina 上积极参与开源社区