zoukankan      html  css  js  c++  java
  • 蓝桥杯 2016年 第七届 剪邮票(JAVA)

    蓝桥杯 2016年 第七届 剪邮票(JAVA)

    
    package provincial_2016B;
    
    public class Seven_case2 {
    	private static final int TOTAL=12;
    	private static int[] comb={0,0,0,0,0,0,0,1,1,1,1,1};
    	private static int[] vis=new int[TOTAL];
    	private static int[][] map=new int[3][4];
    	private static int ans;
    	
    	public static void dfs(int i,int j){
    		map[i][j]=0;
    		if(i-1>=0&&map[i-1][j]==1)dfs(i-1, j);
    		if(i+1<3&&map[i+1][j]==1)dfs(i+1, j);
    		if(j-1>=0&&map[i][j-1]==1)dfs(i, j-1);
    		if(j+1<4&&map[i][j+1]==1)dfs(i, j+1);
    	}
    	
    	public static void check(int[] path){
    		// 在12个数字中选择5个
    		for(int i=0;i<3;i++){
    			for(int j=0;j<4;j++){
    				if(path[i*4+j]==1) map[i][j]=1;
    				else map[i][j]=0;
    			}
    		}
    		// 检测连通性
    		int cnt=0;
    		for(int i=0;i<3;i++){
    			for(int j=0;j<4;j++){
    				if(map[i][j]==1){
    					dfs(i,j);
    					cnt++;
    				}
    			}
    		}
    		if(cnt==1) ans++;
    	}
    
    	// 自动去重的全排列
    	public static void permutation(int k, int[] path) {
    		if(k==TOTAL) {
    			check(path);
    			return;
    		}
    		for(int i=0;i<TOTAL;i++){
    			if(i>0&&comb[i]==comb[i-1]&&vis[i-1]!=0)
    				continue;
    			if(vis[i]==0){
    				vis[i]=1;
    				path[k]=comb[i];
    				permutation(k+1, path);
    				vis[i]=0;
    			}
    		}
    	}
    	
    	public static void main(String[] args) {
    		int[] path=new int[TOTAL];
    		permutation(0, path);
    		System.out.println(ans);
    	}
    }
    
    
  • 相关阅读:
    多进程2
    并发编程
    粘包
    socket
    网络编程
    异常与网络编程
    面向对象高级
    多态
    面向对象2
    SQL数据库约束行为---防止数据乱填(即数据规范化)
  • 原文地址:https://www.cnblogs.com/fromneptune/p/12482714.html
Copyright © 2011-2022 走看看