Algs4- 1.5.18随机网格生成器-(未读懂题)

1.5.18随机网格生成器。编写一个程序RandomGrid,从命令行接受一个int值N,生成一个NXN的网格中的所有连接。它们的排列随机且方向随机(即(p q)和(q p)出现的可能性是相等的),将这个结果打印到标准输出中。可以使用RandomBag将所有连接随机排列(请见练习1.3.34),并使用如右下所示的Connection嵌套类来将p和q封装到一个对象中。将程序打包成两个静态方法:generate(),接受参数N并返回一个连接的数组;main(),从命令行接受参数N,调用generate(),遍历返回的数组并打印出所有连接。
答:感觉没有完全读懂题。
public class RandomGrid
{
    public static class Connection
    {
        int p;
        int q;
        public Connection(int p,int q)
        {this.p=p; this.q=q;}
       
        public int P()
        {return p;}
   
        public int Q()
        {return q;}
    }
    public static Connection[] generate(int N)
    {
        UF uf=new UF(N*N);
        Bag<Connection> bagOfConn=new Bag<Connection>();
         while (uf.count()>1)
           {
               int p=StdRandom.uniform(N*N);
               int q=StdRandom.uniform(N*N);
               if(uf.connected(p,q)) continue;
               uf.union(p,q);
                bagOfConn.add(new Connection(p,q));
            }//end while
        Connection[] conns=new Connection[bagOfConn.size()];
        int i=0;
        for (Connection item:bagOfConn)
        {
            conns[i]=item;
            i++;
        }
        return conns;
    }
   

    public static void main(String[] args)
    {
        int N=Integer.parseInt(args[0]);
        Connection[] conn=generate(N);
        //
        int i=0;
        while (i<conn.length)
        {
            StdOut.printf("p=%-6d q=%-6d \n",conn[i].P(),conn[i].Q());
            //
            i++;
        }
    }
}


posted @ 2018-10-26 10:17  修电脑的龙生  阅读(331)  评论(0编辑  收藏  举报