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 ",conn[i].P(),conn[i].Q());
//
i++;
}
}
}
答:感觉没有完全读懂题。
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 ",conn[i].P(),conn[i].Q());
//
i++;
}
}
}