zoukankan      html  css  js  c++  java
  • 递归与分治1

    格雷码问题:

    对于给定的正整数n,格雷码为满足如下条件的一个编码序列:

    (1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串。

    (2) 序列中无相同的编码。

    (3) 序列中位置相邻的两个编码恰有一位不同。

    例如:n=1时的格雷码为:{0, 1}

    n=2时的格雷码为:{00, 01, 11, 10}

    n=3时的格雷码为:{000, 001, 011, 010,110,111,101,100}

    gray码问题求解思想:

    将一个规模ngray码序列表示为G(n), G(n)以相反顺序排列的序列表示为G(n)。则gray码的构造规则即子问题的划分规则为:G(n+1)= 0G(n) 1G(n)

    gray码问题代码:G(n+1)= G(n) 0G(n)1

    import java.util.*;
    import java.io.*;
    public class Gray{
      public static String[] GrayCode(int n){
         String[] grayCodeArr=new String[(int)Math.pow(2,n)];
          
         if(n<1){
            System.out.println("");
         }
         if(n==1){
            grayCodeArr[0]="0";
            grayCodeArr[1]="1";
            return grayCodeArr;
         }
          //n-1格雷码
         String[] before=GrayCode(n-1);
         for(int i=0;i<before.length; i++){
            grayCodeArr[i]="0"+before[i];
            grayCodeArr[grayCodeArr.length-1-i]="1"+before[i];
         }
         return grayCodeArr;
      }
    
      public static void main(String[] arg){
         Scanner input=new Scanner(System.in);
         int n=input.nextInt();
         String[] strArr=GrayCode(n);
         for(int i=0;i<strArr.length;i++){
            System.out.println(strArr[i]);
         }
      }
    }
  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/ljs-666/p/7892193.html
Copyright © 2011-2022 走看看