📄 status.java.bak
字号:
package zdg;
//status类用来存储某一个状态元素
//import java.util.ArrayList;
public class Status implements Cloneable {
private int status[][];
//用数组存储当前的状态(依次编号为123456789个位置,其中值为零的位置表示空)
private int depth;
//当前状态的深度值,以便求解cost
private int now_cost;
//有当前状态到目的状态的代价(),用来求cost
private int cost;
//当前状态到目的状态的估计代价,用来决定下次搜索的状态
public Status clone()
{
Status result=null;
try
{
result = (Status)super.clone();
result.status=status.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
System.out.println("不能复制");
}
return result;
}
public void setStatus(int[][] array)
{
this.status=array;
}
public int[][] getStatus()
{
return this.status;
}
public void printStatus()
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
System.out.print(this.status[i][j]+" ");
}
System.out.println();
}
}
public int getCost(Status finish)
{
int cost=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(this.status[i][j]!=finish.getStatus()[i][j])
cost++;
}
}
return cost;
}
public void setCost(int cost)
{
this.cost=cost;
}
public int[] getLoc()
{//获得0的坐标,以判断移动规则
int loc[]={0,0};
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(this.status[i][j]==0)
{
loc[0]=i;
loc[1]=j;
//System.out.println("当前空格位置:"+i+" "+j);
}
}
}
return loc;
}
public int getValueByLoc(int row,int col)
{//根据位置获得需要交换的非零数据的值
return this.status[row][col];
}
public void setValueByLoc(int row,int col,int value)
{
this.status[row][col]=value;
}
public Status upMove()
{//当前状态空格上移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动位置的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
Status after_move=new Status();
temp=this.getLoc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.getValueByLoc(row-1, col);
this.setValueByLoc(row, col, value);
this.setValueByLoc(row-1, col, 0);
after_move.setStatus(this.status);
return after_move;
}
/*
public Status upMove()
{//当前状态空格上移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动位置的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
Status after_move=new Status();
Status temp_status=new Status();
temp_status=(Status)this.clone();
temp_status.printStatus();
//保存之前的状态
System.out.println("temp_status "+temp_status.toString());
System.out.println("this "+this.toString());
System.out.println("temp_status.status "+temp_status.status.toString());
System.out.println("this.staut "+this.status.toString());
if(temp_status==this)//判断地址是否相同
{
System.out.println("dizhixiaongtong ");
}
else {System.out.println("butong");}
System.out.println("qian");
this.printStatus();
temp=temp_status.getLoc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动(对temp_status移动)
value=temp_status.getValueByLoc(row-1, col);
temp_status.setValueByLoc(row, col, value);
temp_status.setValueByLoc(row-1, col, 0);
if(temp_status==this)//判断地址是否相同
{
System.out.println("dizhixiaongtong ");
}
else {System.out.println("butong");}
System.out.println("temp_status");
temp_status.printStatus();
System.out.println("this");
this.printStatus();
after_move.setStatus(temp_status.status);
System.out.println("hou");
after_move.printStatus();
System.out.println("yuan");
this.printStatus();
//this=temp_status;
return after_move;
}
*/
public Status downMove()
{
//当前状态空格下移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
Status after_move=new Status();
int[][] temp_status;
temp_status=this.status;
temp=this.getLoc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.getValueByLoc(row+1, col);
this.setValueByLoc(row, col, value);
this.setValueByLoc(row+1, col, 0);
after_move.setStatus(this.status);
return after_move;
}
public Status leftMove()
{//当前状态空格左移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
int[][] temp_status;
temp_status=this.status;
Status after_move=new Status();
temp=this.getLoc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.getValueByLoc(row, col-1);
this.setValueByLoc(row, col, value);
this.setValueByLoc(row, col-1, 0);
after_move.setStatus(this.status);
return after_move;
}
public Status rightMove()
{//当前状态空格右移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
int[][] temp_status;
temp_status=this.status;
Status after_move=new Status();
temp=this.getLoc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.getValueByLoc(row, col+1);
this.setValueByLoc(row, col, value);
this.setValueByLoc(row, col+1, 0);
after_move.setStatus(this.status);
return after_move;
}
/*
public int[][] up_move()
{//当前状态空格上移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
temp=this.get_Loc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.get_Value_By_Loc(row-1, col);
this.set_Value_By_Loc(row, col, value);
this.set_Value_By_Loc(row-1, col, 0);
return this.status;
}
public int[][] dowm_move()
{
//当前状态空格下移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
temp=this.get_Loc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.get_Value_By_Loc(row+1, col);
this.set_Value_By_Loc(row, col, value);
this.set_Value_By_Loc(row+1, col, 0);
return this.status;
}
/*
public int[][] left_move()
{//当前状态空格左移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
temp=this.get_Loc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.get_Value_By_Loc(row, col-1);
this.set_Value_By_Loc(row, col, value);
this.set_Value_By_Loc(row, col-1, 0);
return this.status;
}
public int[][] right_move()
{//当前状态空格右移,返回另一个状态
int row=0;int col=0;
int value=-1;//定义临时变量存储要移动的非零值
int temp[]=new int[2];//定义临时数组存放空格位置的坐标
temp=this.get_Loc();
row=temp[0];//获得空格的行位置
col=temp[1];
//数据的移动
value=this.get_Value_By_Loc(row, col+1);
this.set_Value_By_Loc(row, col, value);
this.set_Value_By_Loc(row, col+1, 0);
return this.status;
}
*/
public boolean isFinish(Status finish)
{//判断当前转台是不是目的状态
if(this.status.equals(finish.getStatus()))
return true;
else
return false;
}
public boolean isUp()
{//获得当前状态的行位置,并判断是否能够上移
int row=0;
row=this.getLoc()[0];
if(row==0)
return false;
else
return true;
}
public boolean isDown()
{//获得当前状态的行位置,并判断是否能够下移
int row=0;
row=this.getLoc()[0];
if(row==2)
return false;
else
return true;
}public boolean isLeft()
{//当前状态是否能够左移
int col=0;
col=this.getLoc()[1];
if(col==0)
return false;
else
return true;
}
public boolean isRight()
{//当前状态是否能够右移
int col=0;
col=this.getLoc()[1];
System.out.println(col);
if(col==2)
return false;
else
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -