随机连接

编写一段Java程序,从命令行接受一个整数N和double p(0到1之间)作为参数,在一个圆上画出大小为0.05且间距相等的N个点,然后将每对点按照概率p用灰线连接。

import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;

这是引入包,首先我们需要导入两个库:
1.下载stdlib.jar和algs4.jar包
下载连接
2.将stdlib.jar和algs4.jar导入到Eclipse中
右键你的工程目录,最后一项属性Properties,第三项Java Build Path,右边选项卡第三项Libraries,然后Add JARS
那就选第二个Add External JARS,然后找到下载的两个包添加进去,应该就行了

1.画出一个圆

	//此处为画圆操作
	public static void drawcircle(double x,double y,double r,int N, double[][] a)
	{
		StdDraw.setXscale(0,x*2);//X轴的范围
		StdDraw.setYscale(0,y*2);//Y轴的范围
		StdDraw.setPenColor(StdDraw.RED);
		StdDraw.circle(50,50,50);//画圆
		
		for(int i=0;i<N;i++)
		{
			StdDraw.setPenRadius(0.05);
			StdDraw.setPenColor(StdDraw.BLACK);
			double m=50-50*Math.cos(2*Math.PI*i/N);
			double n=50+50*Math.sin(2*Math.PI*i/N);
			StdDraw.point(m,n);//画点
			a[i][0]=m;//记录点的X位置
			a[i][1]=n;//记录点的Y位置
			StdDraw.setPenColor(StdDraw.RED);
			}
	}

2.随机画线

	//此处为随机连线操作
	public static void Randomline(double x,double y,double[][] a,double p)
	{
		StdDraw.setXscale(0,x*2);
		StdDraw.setYscale(0,y*2);
		StdDraw.setPenRadius(0.01);
		StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
		int N=a.length;
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
			{
				if(StdRandom.bernoulli(p))
					StdDraw.line(a[i][0], a[i][1], a[j][0], a[j][1]);
			}
	}

3.完整代码

package test;
import java.util.Scanner;

import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;


public class RandomAccess {
	@SuppressWarnings("resource")
	public static void main(String[] args)
	{
		double x=50;
		double y=50;
		double r=50;
		Scanner In=new Scanner(System.in);
		int N=In.nextInt();
		double p=In.nextDouble();
		double [][] a=new double[N][2];
		
		drawcircle(x,y,r,N,a);
		Randomline(x,y,a,p);
	}
	
	//此处为画圆操作
	public static void drawcircle(double x,double y,double r,int N, double[][] a)
	{
		StdDraw.setXscale(0,x*2);
		StdDraw.setYscale(0,y*2);
		StdDraw.setPenColor(StdDraw.RED);
		StdDraw.circle(50,50,50);
		
		for(int i=0;i<N;i++)
		{
			StdDraw.setPenRadius(0.05);
			StdDraw.setPenColor(StdDraw.BLACK);
			double m=50-50*Math.cos(2*Math.PI*i/N);
			double n=50+50*Math.sin(2*Math.PI*i/N);
			StdDraw.point(m,n);
			a[i][0]=m;
			a[i][1]=n;
			StdDraw.setPenColor(StdDraw.RED);
			}
	}
	
	//此处为随机连线操作
	public static void Randomline(double x,double y,double[][] a,double p)
	{
		StdDraw.setXscale(0,x*2);
		StdDraw.setYscale(0,y*2);
		StdDraw.setPenRadius(0.01);
		StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
		int N=a.length;
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
			{
				if(StdRandom.bernoulli(p))
					StdDraw.line(a[i][0], a[i][1], a[j][0], a[j][1]);
			}
	}
	

}

最后,运行程序,输入:
10
0.12

结果为:
随机连接