Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找出图是否是同构Java_Java - Fatal编程技术网

找出图是否是同构Java

找出图是否是同构Java,java,Java,我需要通过生成所有置换来检查图是否同构。我正在使用这个置换类,现在我需要创建一个图形类,它将图形表示为2D布尔数组。例如,用户以字符串形式输入两个图形 例如“0-10-21-21-31-32-3”和“1-32-0-3 1-21-0” 现在,在我的构造函数中,我必须将其分解,并将其放入二维布尔数组中。我该怎么做呢 用户还可以输入更复杂的内容,如“0-11-2-2-3-0-4 0-11 1-5 1-6 2-7 2-8 3-9 3-10 4-5 6-7 8 8-9 10-11 4-7-8 5-9 5-

我需要通过生成所有置换来检查图是否同构。我正在使用这个置换类,现在我需要创建一个图形类,它将图形表示为2D布尔数组。例如,用户以字符串形式输入两个图形

例如“0-10-21-21-31-32-3”和“1-32-0-3 1-21-0”

现在,在我的构造函数中,我必须将其分解,并将其放入二维布尔数组中。我该怎么做呢

用户还可以输入更复杂的内容,如“0-11-2-2-3-0-4 0-11 1-5 1-6 2-7 2-8 3-9 3-10 4-5 6-7 8 8-9 10-11 4-7-8 5-9 5-10 6-9 6-6-10 7-10 7-11”和“0-11-2-3-0-4 0-7 1-4 1-5 2-6 3-6 3-7 4-8 4-9 5-9 5-10 6-10 6-10 6-11 7-8-8-11 7-10-9-8-11”

公共类置换生成器
{
//私有数据
私有int[]perm;
私有布尔优先;
//建造师
公共置换生成器(int n)
{
perm=新整数[n];
第一个=正确;
}
公共int[]下一个()
{
int n=平均长度;
//开始置换:0 1 2 3…n-1
如果(第一)
{
第一个=假;
对于(int i=0;i=0&&perm[k]>=perm[k+1];k--)
;
if(k<0)
返回null;//不再返回
//求最大的l,使perm[k]=0&&perm[k]>=perm[l];l--)
;
//交换perm[k]和perm[l]
交换(perm、k、l);
//反向烫发[k+1]…烫发[n-1]
对于(i=k+1,j=n-1;i
您必须创建一个矩阵来表示图形,如下图所示:

您可以首先提示用户输入两个已连接的节点,例如1和2。那你会做的

matrix[1][2] = true;
matrix[1][2] = true;
matrix[2][1] = true;
如果考虑方向,这意味着
1-2
2-1
不同。否则(一个无方向的图),你会这样做

matrix[1][2] = true;
matrix[1][2] = true;
matrix[2][1] = true;
不要忘记使用
false
初始化矩阵,这意味着(顶点未连接)。每次要检查顶点
X
Y
是否直接连接时,只需访问矩阵的位置
(X,Y)
,并检查其是否为真

如果您的图是加权图,则需要有一个额外的矩阵来保存权重。另一种解决方案是只包含一个整数矩阵,其中
-1
表示未连接,
N>0
,表示给定的
X
Y
与权重
N
连接

关于用户输入:

“0-11-2-3-0-40-11-51-62-72-83-93-104-56-78-910-114-74-84-85-95-106-96-107-11”

除其他外,您可以使用该类:

之后,您必须解析您的输入;让我们假设一个固定的格式来保存图形顶点,例如:

  String input =  "0-1 0-2 1-2 1-3 2-3";
  int x,y;

  for(int i = 0; i < input.length(); i+=4)
  {
       x = Character.getNumericValue(input.charAt(i));   // first vertex 
       y = Character.getNumericValue(input.charAt(i+2)); // second vertice 
       matrix_graph[x][y] = true;
       matrix_graph[y][x] = true; // if the graph is not oriented.
  }   
        
String input=“0-10-21-21-31-32-3”;
int x,y;
对于(int i=0;i