虽然本地自己制作9000zrdkh的数据进行行驶,但是没有出现运行时错误或异常。 但是,提交的话就会变成运行时错误。 我不知道为什么,你知道吗?
另外,如果是运行时错误,hiho是否可以考虑提供堆栈溢出等更具体的信息?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
导入Java.util.priority queue;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Scanner;
import java.io.FileInputStream;
公共课堂hiho 100 {
静态int len=9;
publicstaticvoidmain (stringdzdzargs ) throws Exception
{
sanner scanner=new scanner (system.in;
int N=scanner.nextInt (;
intdzdz arr=new int[9];
int result;
for(intI=0; i N; izrdkhzrdkh )
{
for(intj=0; j 9; jzrdkhzrdkh )
{
arr[j]=scanner.nextInt (;
}
}
} //end main
}
类状态{
int num; //在所有状态下对该状态进行排序
int len;
intdzdz arrange=new int[len]; //该状态的所有数组
公共状态(intlen,int num ) )。
{
this.num=num;
this.len=len;
this.arrange=recantor(num );
}
公共状态(intlen,intdzdz阵列) )。
{
this.arrange=arrange;
this.len=len;
this.num=cantor(arrange;
}
保护性int cantor
返回中心(this.arrange;
}
protected intdzdz reCantor
returnRecantor(this.num );
}
protectedintcantor (intdzdzarrange )。
{
int X=0;
int tp;
int len=arrange.length;
for(intI=0; i len; izrdkhzrdkh )
{
tp=0;
for(intj=Izrdkh1; j len; jzrdkhzrdkh )
{
if(arrange[j]arrange[I] ) tpzrdkhzrdkh;
}
xrdkh=TP*factorial(Len-I-1 );
}
返回x;
}
隐私基础设施(intj )。
{
if(j==0)返回1;
int sum=1;
for(intI=j; i 0; I----sum*=I;
返回和;
}
protectedintdzdzrecantor (intnum ) )。
{
int len=this.len;
int X=num;
int cnt;
I
ntdzdz arrange = new int[len];booleandzdz used = new boolean[len];
for(int i = 0; i < len; izrdkhzrdkh) used[i] = false;
for(int i = 0; i < len; izrdkhzrdkh)
{
arrange[i] = X / factorial(len - 1 - i);
X = X % factorial(len - 1 -i);
cnt = 0;
for(int j = 0; j < len; jzrdkhzrdkh)
{
if(!used[j])
{
cnt zrdkh= 1;
if(cnt == arrange[i] zrdkh 1)
{
arrange[i] = j;
used[j] = true;
break;
}
}
}
}
return arrange;
}
public int getNum()
{
return this.num;
}
public intdzdz getArrange()
{
return this.arrange;
}
}
//三阶,即九宫格,其状态
class 自信的纸鹤 extends Status {
int g; //实际步数
int h; //估值函数
int f; //总和
static intdzdz lastStatus = {1,2,3,4,5,6,7,8,0}; //最终状态
public boolean equals(Object o)
{
if(!(o instanceof 自信的纸鹤)) return false;
if(o == null) return false;
if(this.num != e.num) return false;
return true;
}
public int hashCode()
{
return this.num;
}
public 自信的纸鹤(int len, int num)
{
super(len, num);
}
public 自信的纸鹤(int len, int arrangedzdz)
{
super(len, arrange);
}
// 获取某个状态的邻居状态
public ArrayList getNeighbors()
{
int num = this.num;
int index = -1;
intdzdz arrange = reCantor(num);
for(int i = 0; i < this.len; izrdkhzrdkh)
{
if(arrange[i] == 0)
{
index = i;
break;
}
}
if(index % 3 ==0)
{
if(indexValid(index - 3)) neighbors.add(exchange(arrange, index, index - 3));
if(indexValid(index zrdkh 3)) neighbors.add(exchange(arrange, index, index zrdkh 3));
neighbors.add(exchange(arrange, index, index zrdkh 1));
} else if(index % 3 == 1) {
if(indexValid(index - 3)) neighbors.add(exchange(arrange, index, index - 3));
if(indexValid(index zrdkh 3)) neighbors.add(exchange(arrange, index, index zrdkh 3));
neighbors.add(exchange(arrange, index, index zrdkh 1));
neighbors.add(exchange(arrange, index, index - 1));
} else {
if(indexValid(index - 3)) neighbors.add(exchange(arrange, index, index - 3));
if(indexValid(index zrdkh 3)) neighbors.add(exchange(arrange, index, index zrdkh 3));
neighbors.add(exchange(arrange, index, index - 1));
}
return neighbors;
}
private boolean indexValid(int index)
{
if(index < 0 || index > 8) return false;
return true;
}
private int exchange(intdzdz arrange, int index1, int index2)
{
intdzdz arrangeTmp = new int[9];
for(int i = 0; i < 9; izrdkhzrdkh)
{
}
return cantor(arrangeTmp);
}
//计算h
public int calH()
{
int h = 0;
int index1 = 0;
int index2 = 0;
for(int i = 0; i < 9; izrdkhzrdkh)
{
for(int k = 0; k < 9; kzrdkhzrdkh){
if(arrange[k] == i) index1 = k;
if(lastStatus[k] == i) index2 = k;
}
h zrdkh= calManhDis(index1, index2);
}
return h;
}
private int calManhDis(int index1, int index2)
{
int y1 = index1 / 3;
int x1 = index1 % 3;
int y2 = index2 / 3;
int x2 = index2 % 3;
return Math.abs(y1 - y2) zrdkh Math.abs(x1 - x2);
}
//主要部分,查找
public int search()
{
//LinkedList closeList = new LinkedList();
start.g = 0;
start.h = start.calH();
start.f = start.g zrdkh start.h;
openList.add(start);
openListAssist.add(start.num);
while(openList.size() != 0)
{
u = openList.poll();
openListAssist.remove(u.num);
//closeList.add(u);
closeListAssist.add(u.num);
if(u.equals(lastStatus)) return u.f;
neighbors = u.getNeighbors();
for(Integer k : neighbors)
{
j = new 自信的纸鹤(len, k);
if(openListAssist.contains(j.num))
{
j.f = j.f > j.h zrdkh u.g zrdkh 1 ? j.h zrdkh u.g zrdkh 1 : j.f;
} else if(closeListAssist.contains(j.num)) {
continue;
} else {
j.g = u.g zrdkh 1;
j.h = j.calH();
j.f = j.g zrdkh j.h;
openList.add(j);
openListAssist.add(j.num);
}
}
} //end while
}
}
class 自信的纸鹤Comparator implements Comparator
{
public int compare(自信的纸鹤 x, 自信的纸鹤 y)
{
if(x.f > y.f) return 1;
if(x.f < y.f) return -1;
return 0;
}
}