算法-第四版-练习1.2.3解答
编写一个Interval2D的用例,从命令行接受参数N、min和max。生成N个随机的2D间隔,其宽度和高均匀地分布在单位正方形中的min和max之间。用StdDraw画出它们并打印出相交的间隔对的数量以及有包含关系的间隔对数量。
/**
* Description :
* Author : mn@furzoom.com
* Date : Sep 26, 2016 3:26:18 PM
* Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
*/
package com.furzoom.lab.algs.ch102;
import edu.princeton.cs.algs4.Interval1D;
import edu.princeton.cs.algs4.Interval2D;
import edu.princeton.cs.algs4.StdRandom;
/**
* ClassName : E10203 <br>
* Function : TODO ADD FUNCTION. <br>
* date : Sep 26, 2016 3:26:18 PM <br>
*
* @version
*/
public class E10203
{
public static double min(double d1, double d2)
{
return d1 < d2 ? d1 : d2;
}
public static double max(double d1, double d2)
{
return d1 > d2 ? d1 : d2;
}
public static void main(String[] args)
{
int n = Integer.parseInt(args[0]);
double min = Double.parseDouble(args[1]);
double max = Double.parseDouble(args[2]);
Interval2D[] intervals = new Interval2D[n];
for (int i = 0; i < n; i++)
{
double d1 = StdRandom.uniform(min, max);
double d2 = StdRandom.uniform(min, max);
double d3 = StdRandom.uniform(min, max);
double d4 = StdRandom.uniform(min, max);
intervals[i] = new Interval2D(new Interval1D(min(d1, d2), max(d1, d2)),
new Interval1D(min(d3, d4), max(d3, d4)));
}
// draw all Interval2D
for (int i = 0; i < n; i++)
{
intervals[i].draw();
}
//
int countIntersects = 0;
int countContains = 0;
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (intervals[i].intersects(intervals[j]))
{
countIntersects++;
}
// if (intervals[i].contains(intervals[j]))
// {
//
// }
}
}
System.out.println(countIntersects);
}
}
结果如下:
相交的数量为5.
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。

浙公网安备 33010602011771号