0
2次元配列の中身を変えると、他の配列の中身も変わってしまします。
実行すれば分かるのですが、list[p]に数値を入れる際、pは1以上にしかならないのに、list[0]の中身も書き換わってしまいます。
どうしても原因が分かりません。助けてください。
import java.io.*;
public class puzzle8{
public static void main(String[] args){
int[][] list;
list = new int[100][11];
int[][] idou = {
{0,0,0,0,0},
{2,4,-1,-1,-1},
{1,5,3,-1,-1},
{2,6,-1,-1,-1},
{1,5,7,-1,-1},
{2,4,6,8,-1},
{3,5,9,-1,-1},
{4,8,-1,-1,-1},
{5,7,9,-1,-1},
{6,8,-1,-1,-1},
};
int p = 1;
//初期状態
list[0][0]=0;//探索済みフラグ
list[0][1]=2;
list[0][2]=8;
list[0][3]=3;
list[0][4]=1;
list[0][5]=6;
list[0][6]=4;
list[0][7]=7;
list[0][8]=0;
list[0][9]=5;
list[0][10]=-1;//前状態へのフラグ
int[] c = {1,2,8,3,1,6,4,7,0,5,-1};
//最終状態
int[] kansei = {1,2,3,8,0,4,7,6,5};
hyouji(list);
//ここから探索
outer:
for(int i=0; i<=p; i++){
if(list[i][0]==0){
for(int j=1; j<=9; j++){
if(list[i][j]==0){
for(int l=0; l<5; l++){
if(idou[j][l]>0){
list[p] = list[i];
list[p][j]=list[p][l];
list[p][l]=0;
list[p][10] =i;
hantei(list[p],kansei);
p++;
hyouji2(list[i]);
hyouji(list);
}else if(idou[j][l]==-1){
list[i][0]=1;
break outer;
}
}
}
}
}
}
hyouji(list);
}
//交換
public static int[] koukan(int[] k,int j,int l){
k[j]=k[l];
k[l]=0;
return k;
}
//判定
public static void hantei(int[] h,int[] e){
outer:
for(int i=1; i<=9; i++){
if(h[i] != e[i]){
break outer;
}
if(i==9){
syuuryou();
}
}
}
public static void syuuryou(){
System.out.println("探索完了");
}
//表示
public static void hyouji(int[][] a){
for(int i = 0; i < 10; i++){
for(int j = 0; j < a[i].length; j++){
System.out.print(a[i][j]);
}
System.out.println();
}
}
//表示2
public static void hyouji2(int[] a){
System.out.println();System.out.println();
for(int i = 0; i < a.length; i++){
System.out.print(a[i]);
}
System.out.println();System.out.println();
}
}