递归算法

时间:2014-12-30 14:51:23

标签: algorithm recursion computer-science backtracking

我需要这个练习的帮助: 给输入中接收整数n的伪代码并打印所有可能的矩阵nxn,其中a高于b,b高于c。 例如,n = 2 :(顺序并不重要)

  

输出:
  aa aa aa ab ab bb aa aa ac cc bb bb bc bc ab ab ac
  aa ab bb ab bb bb ac cc ac cc bc cc bc cc bc cc bc

算法的复杂度为O(n ^ 2 * S(n))。其中S(n)是应该打印的矩阵的数量,n ^ 2是打印时间。 我已经开发了这个代码......但我认为这是错误的......

public class EsercizioNovBT {

    public static void main(String[] args) {
        int n=2 , i , j;
        char[][] m = new char [n][n];
        boolean[] isBR = new boolean [n];
        boolean[] isBC = new boolean [n];
        boolean[] isCR = new boolean [n];
        boolean[] isCC = new boolean [n];
        boolean[] isAC= new boolean [n];
        boolean[] isAR = new boolean [n];

        for(i=0;i<n;i++)
            isBR[i]=false;
        for(i=0;i<n;i++)
            isBC[i]=false;
        for(i=0;i<n;i++)
            isCR[i]=false;
        for(i=0;i<n;i++)
            isCC[i]=false;
        for(i=0;i<n;i++)
            isAR[i]=false;
        for(i=0;i<n;i++)
            isAC[i]=false;
        for (i=0 ; i<n ; i++)
            for(j=0 ; j<n ;j++)
                m[i][j]='d';
        i=0;j=0;
        scriviSuM(m,isBR,isBC,isCR,isCR,i,j,n);



    }



    static void scriviSuM(char[][]M , boolean[] isRB,boolean[] isCB,boolean[] isRC,boolean[] isCC,int i, int j , int n)
    {
        if(i==n)
        {
            for (int r=0 ; r<n ; r++)
            {
                for(int c=0 ; c<n ;c++)
                {
                    System.out.print(M[r][c]);
                }
                System.out.print("\n");
            }
            System.out.println();
        }
        else
        {
            if(j==n)
            {
                j=0;
                scriviSuM(M,isRB,isCB,isRC,isCC,i+1,j,n);
            }
            else
            {

                    if (! (isRC[i]) && !(isCC[j]))
                    {
                        if( ! (isRB[i]) && !(isCB[j]) )  // se non ci sono già delle b allora puoi prendere a
                        {
                            M[i][j]='a';
                            scriviSuM(M,isRB,isCB,isRC,isCC,i,j+1,n);
                        }

                        isRB[i]=isCB[j]=true;
                        M[i][j]='b';
                        scriviSuM(M,isRB,isCB,isRC,isCC,i,j+1,n);
                    }
                    isRC[i]=isCC[j]=true;
                    M[i][j]='c';
                    scriviSuM(M,isRB,isCB,isRC,isCC,i,j+1,n);
            }
        }
    }
  

输出是:
aa
aa

     

aa
ab b

     

aa
ac

     

aa
bc

     

aa
cc

     

ab
cc

     

ac
cc

     

bc
cc

     

cc
cc

0 个答案:

没有答案