Arrays.deepEquals 在 2 个相同的数组上返回 false
Arrays.deepEquals returning false on 2 identical arrays
我有密码
import java.util.*;
import java.io.*;
public class Dijkstra {
public static int [][] Dijkstra_alg( int n, int e, int mat[][], int s)
{
s=s-1;
int adj[][]=new int[n][n];
for(int i=0;i<e;i++)
{
adj[mat[i][0]-1][mat[i][1]-1]=mat[i][2];
}
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// System.out.print(adj[i][j]+"\t\t");
// }
// System.out.println();
// }
int dist[][] = new int[n][n]; //dist[][1] holds USP value
Boolean visited[] = new Boolean[n];
for (int i = 0; i < n; i++)
{
dist[i][0] = Integer.MAX_VALUE;
visited[i] = false;
dist[i][1]=1;
}
dist[s][0] = 0;
for (int i = 0; i < n-1; i++)
{
int min = Integer.MAX_VALUE;
int u=-1;
for (int v = 0; v < n; v++)
if (visited[v] == false && dist[v][0] <= min)
{
min = dist[v][0];
u = v;
}
visited[u] = true;
//relax
for (int v = 0; v < n; v++)
{
if (!visited[v] && adj[u][v]!=0 && dist[u][0] != Integer.MAX_VALUE &&dist[u][0]+adj[u][v] < dist[v][0])
{
dist[v][0] = dist[u][0] + adj[u][v];
dist[v][1]=1;
}
else if(!visited[v] && adj[u][v]!=0 && dist[u][0] != Integer.MAX_VALUE &&dist[u][0]+adj[u][v] == dist[v][0])
dist[v][1]=0;
}
}
return dist;
}
public static void main(String args[])
{
int[][] Mat = { {1, 2, 9}, {1, 3, 6}, {1, 4, 5}, {1, 5, 3}, {3, 2, 2}, {3, 4, 4} };
int N = 5;
int E = 6;
int S = 1;
int [][] ans = {{0, 1}, {8, 1}, {6, 1}, {5, 1}, {3, 1}};
int [][] dist=Dijkstra_alg(N,E,Mat,S);
System.out.println(dist.length);
System.out.println(ans.length);
for (int i = 0; i < N; i++)
{
System.out.println(dist[i][0]+"\t\t"+dist[i][1]);
System.out.println(ans[i][0]+"\t\t"+ans[i][1]);
}
System.out.println((Arrays.deepEquals(dist,ans)));
}
}
dist 和 ans 打印出完全相同的结果,但即便如此,Arrays.deepEquals returns false。无法弄清楚为什么它显示 false
这两个数组是相同的,但给出的结果是假的
输出如下:
5
5
0 1
0 1
8 1
8 1
6 1
6 1
5 1
5 1
3 1
3 1
false
如您所见,输出完全相同,不应该给出这样的错误,但它仍然如此。无法弄清楚为什么会这样。
有人知道如何解决这个问题吗?
int dist[][] = new int[n][n];
dist
的第二个维度是n
,而ans
的第二个维度是2。
改为
int dist[][] = new int[n][2];
我有密码
import java.util.*;
import java.io.*;
public class Dijkstra {
public static int [][] Dijkstra_alg( int n, int e, int mat[][], int s)
{
s=s-1;
int adj[][]=new int[n][n];
for(int i=0;i<e;i++)
{
adj[mat[i][0]-1][mat[i][1]-1]=mat[i][2];
}
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// System.out.print(adj[i][j]+"\t\t");
// }
// System.out.println();
// }
int dist[][] = new int[n][n]; //dist[][1] holds USP value
Boolean visited[] = new Boolean[n];
for (int i = 0; i < n; i++)
{
dist[i][0] = Integer.MAX_VALUE;
visited[i] = false;
dist[i][1]=1;
}
dist[s][0] = 0;
for (int i = 0; i < n-1; i++)
{
int min = Integer.MAX_VALUE;
int u=-1;
for (int v = 0; v < n; v++)
if (visited[v] == false && dist[v][0] <= min)
{
min = dist[v][0];
u = v;
}
visited[u] = true;
//relax
for (int v = 0; v < n; v++)
{
if (!visited[v] && adj[u][v]!=0 && dist[u][0] != Integer.MAX_VALUE &&dist[u][0]+adj[u][v] < dist[v][0])
{
dist[v][0] = dist[u][0] + adj[u][v];
dist[v][1]=1;
}
else if(!visited[v] && adj[u][v]!=0 && dist[u][0] != Integer.MAX_VALUE &&dist[u][0]+adj[u][v] == dist[v][0])
dist[v][1]=0;
}
}
return dist;
}
public static void main(String args[])
{
int[][] Mat = { {1, 2, 9}, {1, 3, 6}, {1, 4, 5}, {1, 5, 3}, {3, 2, 2}, {3, 4, 4} };
int N = 5;
int E = 6;
int S = 1;
int [][] ans = {{0, 1}, {8, 1}, {6, 1}, {5, 1}, {3, 1}};
int [][] dist=Dijkstra_alg(N,E,Mat,S);
System.out.println(dist.length);
System.out.println(ans.length);
for (int i = 0; i < N; i++)
{
System.out.println(dist[i][0]+"\t\t"+dist[i][1]);
System.out.println(ans[i][0]+"\t\t"+ans[i][1]);
}
System.out.println((Arrays.deepEquals(dist,ans)));
}
}
dist 和 ans 打印出完全相同的结果,但即便如此,Arrays.deepEquals returns false。无法弄清楚为什么它显示 false
这两个数组是相同的,但给出的结果是假的
输出如下:
5
5
0 1
0 1
8 1
8 1
6 1
6 1
5 1
5 1
3 1
3 1
false
如您所见,输出完全相同,不应该给出这样的错误,但它仍然如此。无法弄清楚为什么会这样。
有人知道如何解决这个问题吗?
int dist[][] = new int[n][n];
dist
的第二个维度是n
,而ans
的第二个维度是2。
改为
int dist[][] = new int[n][2];