-1
arraylistをコピーする必要があるコードを記述していますが、デバッグ後に間違った答えが出ています。arraylistのコピーを変更すると元のarraylistが変更されていますが、ArrayListはコピーを変更して変更します
static void iterDeep(int level,ArrayList<ArrayList<Integer>> current){
if(current.equals(dest)){
found = 1;
printPath(current);
return;
}
if(level <= 0)
return;
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
ArrayList<ArrayList<Integer>> adj = new ArrayList<ArrayList<Integer>>(current);
if(j == 0){
for(int k=0;k<3;k++){
adj.get(k).set(i , current.get((3+k-1)%3).get(i));
// Here i am changing adj values but values in current are getting changed
}
if(!map.containsKey(adj)){
map.put(adj,current);
iterDeep(level - 1 , adj);
}
}else{
for(int k=0;k<3;k++){
adj.get(k).set(i , current.get((k+1)%3).get(i));
}
if(!map.containsKey(adj)){
map.put(adj,current);
iterDeep(level - 1 , adj);
}
}
}
}
return;
}
短い答え: '新しいのArrayList>と(現在の); 'あなたは新しい「外側」ArrayListを作成しているだけで、内部のArrayListは以前と同じで、したがってあなたの' current'リストとまったく同じ項目を含んでいます。 Googleの深いクローンと浅いクローニングディープクローニングは、ここで必要なものです。 –
Munchhausen