?? 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 + -