質問: true; //ハッシュキーのテーブルをtrueにする field cur; int hash; int count=0; while( (cur=list.pop() )!= null){ count++; //探索回数を1増やす for(int i=0;i<16;i++){ if(cur.cell[i]==0){ //curはカレントフィールド、cell[i]が0の時 if(move[i][LEFT]){ //左に動けるなら、左と交換 cur.cell[i]=cur.cell[i-1]; cur.cell[i-1]=0; hash=hashkey(cur.cell); //hashkeyを生成 if(!visited[hash]){ //hashkeyを訪れていないなら visited[hash]=true; list.insert(new ev_list(new field(cur.cell, cur.route, hash) )); } cur.cell[i-1]=cur.cell[i]; //元に戻す cur.cell[i]=0; } if(move[i][RIGHT]){ cur.cell[i]=cur.cell[i+1]; cur.cell[i+1]=0; hash=hashkey(cur.cell); if(!visited[hash]){ visited[hash]=true; list.insert(new ev_list(new field(cur.cell, cur.route, hash) )); } cur.cell[i+1]=cur.cell[i]; cur.cell[i]=0; } if(move[i][UP]){ cur.cell[i]=cur.cell[i-4]; cur.cell[i-4]=0; hash=hashkey(cur.cell); if(!visited[hash]){ visited[hash]=true; list.insert(new ev_list(new field(cur.cell, cur.route, hash) )); } cur.cell[i-4]=cur.cell[i]; cur.cell[i]=0; } if(move[i][DOWN]){ cur.cell[i]=cur.cell[i+4]; cur.cell[i+4]=0; hash=hashkey(cur.cell); if(!visited[hash]){ visited[hash]=true; list.insert(new ev_list(new field(cur.cell, cur.route, hash) )); } cur.cell[i+4]=cur.cell[i]; cur.cell[i]=0; } } } if(cur.evaluation==0){ //推定コストが0になった時 System.out.println(cur.route.length-1); //cur.routeの長さ-1を出力する //System.out.println(count+""); //System.out.println("evaluation[ " +0+ " ]=" + dehash(cur.route[0]).evaluation + "\n" + dehash(cur.route[0]) ); //evaluation推定コスト、cur.route[0]初期ハッシュキーのtoString() //for(int i=1;i
回答: 今回の件とは関係ないかもしれませんが念のため。 15パズルには絶対に解くことが出来ない配置が存在します。 解く事が出来ない⇒無限ループ、となっている可能性があります。