我正在编写一个程序,它接受有序对,并确定它们是自反,对称和传递...... 鉴于以下几点:(1,1)(1,2)(2,2)(4,4)(2,1)(3,3) 反身:所有这些都存在:(1,1)(2,2)(3,3)(4,4) 对称:如果存在(a,b)则存在(b,a) 及性:如果存在(a,b)和(b,c),那么(a,c)也必须存在...... 我遇到了问题,因为我开始使用链接列表但确定数组会更容易。有人告诉我使用Point []包,它会比并行数组更容易......这就是我所拥有的,我不确定它是否是正确的?我甚至无法将数字存储到我的阵列中!!请帮助!!!
/****************************************************************
* Name: Cheryl Minor Date: March 8, 2011
*
* Program: Write a program that checks whether a relation R
* is an equivalence relation. If R is an equivalence relation
* the program outputs the equivalence classes of R.
****************************************************************/
import java.io.*;
import java.util.*;
public class Problem17
{
static class Point{
int x;
int y;
}
public static void main(String []args)
{
Point[] line = new Point[6];
for(int i = 0; i<line.length; i++)
{
line[i] = new Point();
}
line[0].x = 1;
line[1].x = 1;
line[2].x = 2;
line[3].x = 4;
line[4].x = 2;
line[5].x = 3;
line[0].y = 1;
line[1].y = 2;
line[2].y = 2;
line[3].y = 4;
line[4].y = 1;
line[5].y = 3;
System.out.println(line);
}
}
答案 0 :(得分:0)
你可以写这样的东西。这个算法可以改进,但现在更具可读性:
Point[] list = new Point[5];
...
for (int i=0; i<list.length; i++) {
// checking Reflexive
if (list[i].x == list[i].y) System.out.println("Reflexive" + list[i]);
for (int j=i+1; j<list.length; j++) {
// checking Symmetric
if (list[i].x == list[j].y && list[i].y == list[j].x) ...
for (int k=j+1; k<list.length; k++) {
// checking Transitive
if (list[i].x == list[k].x && list[i].y == list[j].x && ...
}
}
}
小建议:
答案 1 :(得分:0)
所有计算机程序都有一个通用解决方案(又名:金色子弹):divide et impera(由罗马人发明)。
逐步解决您的问题。
......一个采用有序对的程序......给出以下几点:(1,1)(1,2)(2,2)(4,4)(2,1)(3,3)< / p>
我在这里有第一个不和谐。 :)