定义了一个静态内部类,创建了两个实例,然后修改其中一个实例的变量时,不知道为什么另一个的变量也被修改了
写的是洛谷的p1746离开中山路
https://www.luogu.com.cn/problem/P1746
发现在赋值操作后temp的hashcode会变的和t的一样
谢谢各位
package prac;
import java.util.Scanner;
public class bfs_1 {
//col表示该节点在哪列 line表示在哪行
static class nod{
int col;
int line;
}
public static int n,x1,x2,y1,y2;//对应题目的各变量
public static int [][]map=new int[10001][10001];//记录地图
public static int [][]distance=new int[1001][1001];//记录每个节点花费的距离,bfs
public static nod[]queue=new nod[1000];//手动实现bfs使用的队列,下面的是头尾
public static int rear=0,front=0;
public static int[] dx=new int[]{0,1,-1,0};//方向数组
public static int[] dy=new int[]{1,0,0,-1};
public static int to_int(char c) {//输入处理
return (int)(c-'0');
}
public static int bfs(int x,int y) {
bfs_1.nod temp=new bfs_1.nod();
bfs_1.nod t= new bfs_1.nod();
temp.col=x;
temp.line=y;
queue[rear++]= temp;
int a,b,dis=0;
distance[y1][x1]=0;
while(rear!=front) {
temp=queue[front++];
dis=distance[temp.line][temp.col];
for(int i=0;i<4;i++) {
a=temp.col+dx[i];
b=temp.line+dy[i];
if(a<1||a>n||b<1||b>n||map[b][a]!=0||distance[b][a]>=0) {
continue;
}
//在下面这个赋值操作之后,temp就自动改变hashcode,和t的hashcode就一样了
t.line=b;
t.col=a;
queue[rear++]= t;
distance[b][a]=dis+1;
}
}
return distance[y2][x2];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
n=scanner.nextInt();
String tempString;
for(int i=1;i<=n;i++) {
tempString=scanner.next();
for(int j=1;j<=n;j++) {
map[i][j]=to_int(tempString.charAt(j-1));
distance[i][j]=-1;//先将距离都赋值-1
}
}
x1=scanner.nextInt();
y1=scanner.nextInt();
x2=scanner.nextInt();
y2=scanner.nextInt();
System.out.println(bfs(x1, y1));
}
}