我正在编写一个创建节点树的程序,并在dfs上找到它(尚未完成),但是当我尝试将新节点推送到类时,我遇到了问题。新节点用我的方法覆盖旧节点。 Node类声明为
public class Node {
int[][] matrix;
Node pre;
boolean visited;
}
和类dfs是这样的:(仅缺少代码有bug)
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
public class DFS {
private static Stack<Node> stack;
public DFS()
{
stack = new Stack<Node>();
}
public static int dfs(int matrix[][])
{
Node first = new Node();
first.matrix= matrix;
first.visited=true;
first.pre= null;
stack.push(first);
pushleft(stack.peek());
pushleft(stack.peek());
return 0;
}
public static void pushleft(Node Nodeleft)
{
Node Newnode= new Node();
Newnode.matrix = left(Nodeleft.matrix);
stack.push(Newnode);
}
public static int[][] left (int matrix[][]) {
int matrix1[][]= new int[4][4];
for(int i=0; i<=3;i++)
for (int j=3;j>=0;j--)
{
if (matrix[i][j] !=0)
{
for (int k=j; k>=0; k--)
if (matrix[i][k]==0)
{
for (int l=k; l<=2;l++)
matrix1[i][l]=matrix[i][l+1];
matrix1[i][3]=0;
}
break;
}
}
for(int i=0; i<=3;i++)
for (int j=0;j<=2;j++)
{
if (matrix[i][j]==matrix[i][j+1])
{
matrix1[i][j]=matrix[i][j]*2;
for (int l=j+1; l<=2;l++)
matrix1[i][l]=matrix[i][l+1];
matrix1[i][3]=0;
}
}
return matrix1;
}
public static void main(String[] args)
{
stack = new Stack<Node>();
int a[][]=new int[4][4];
int goal;
Scanner in = new Scanner(System.in);
System.out.println("input 4x4");
for(int i=0; i<=3;i++)
for (int j=0;j<=3;j++)
{
a[i][j]=in.nextInt();
}
if (dfs(a)==0)
{
System.out.println("Win");
System.out.println("Cac trang thai:");
while (!stack.isEmpty())
{
for(int i=0; i<=3;i++)
{
for (int j=0;j<=3;j++)
{
System.out.print(stack.peek().matrix[i][j]+ " ");
}
System.out.println("");
}
System.out.println("");
stack.pop();
}
in.close();
}
}
}
当我试图把这个阵列发光时
0 0 0 0
2 2 2 2
0 0 0 2
2 2 4 4
I want my output like this:<br/>
0 0 0 0
8 0 0 0
2 0 0 0
4 8 0 0
0 0 0 0
4 4 0 0
2 0 0 0
4 8 0 0
0 0 0 0
2 2 2 2
0 0 0 2
2 2 4 4
但它只打印了3次:
0 0 0 0
8 0 0 0
2 0 0 0
4 8 0 0
我想我的方法pushleft遇到了静电等问题,但仍无法解决问题。有人可以帮忙吗?
答案 0 :(得分:1)
在您致电Matrix
时,您需要在每次新pushleft
时创建。
您遇到了问题,因为所有Matrix Arrays
都指向同一个object
。
因此,如果您在一个matrix
中更改了任何内容,那么其他matrix
的所有Node object
也会发生变化。
创建新的Matrix
数组,并从old matrix array
分配值。
as
public static int[][] left (int matrix[][]) {
int matrix2[][] = new int[4][4];
// assign all the values as you want
// your code...
return matrix2;
}