24点小游戏利用深度搜索设计

来源:互联网 发布:期货实时数据接口 编辑:程序博客网 时间:2024/05/06 11:27

Poker.class


public class Poker {

private String pokers;

private booleanflag;


public Poker(String pokers){

this.flag =false;

setPokers(pokers);

}

public String getPokers() {

returnpokers;

}


public void setPokers(String pokers) {

if("A".equals(pokers)){

this.pokers ="1";

}

else if("J".equals(pokers)){

this.pokers ="11";

}

else if("Q".equals(pokers)){

this.pokers ="12";

}

else if("K".equals(pokers)){

this.pokers ="13";

}else{

this.pokers = pokers;

}

}


public boolean isFlag() {

returnflag;

}


public void setFlag(boolean flag) {

this.flag = flag;

}

}



Algorithm.class

import java.util.List;



public class Algorithm {

public staticboolean isFinish =false;

Operators operator = Operators.getInstance();

public void dfs(List<Poker> pokerList,int num,double count,String ans){

//当24点并且使用了4张牌之后表示成功

if(isFinish){

return ;

}

if(4==num&&24==count){

System.out.println(ans);

System.out.println("Done!!!!!!!!!!!!!!!!!!!!!!");

System.out.println("");

isFinish =true;

return ;

}

//因为每个牌组都有可能存在很多组合所以需要标记是否找到一个组合就可以

//确保每张牌都使用过

for(int i=0;i<pokerList.size();i++){

Poker p = pokerList.get(i);

//选择没使用的牌

if(!pokerList.get(i).isFlag()){

//判断小鬼和大鬼

if("joker".equals(p.getPokers())||"JOKER".equals(p.getPokers())){

System.out.println("ERROR  \n");

return ;

}

//加法

p.setFlag(true);

if(ans!=""&&ans!=null){

dfs(pokerList,num+1,operator.plus(count,Double.valueOf(p.getPokers())),ans+"+"+p.getPokers());

}else

{

dfs(pokerList,num+1,operator.plus(count,Double.valueOf(p.getPokers())),ans+p.getPokers());

}

if(num>0){

//减

dfs(pokerList,num+1,operator.minus(count,Double.valueOf(p.getPokers())),ans+"-"+p.getPokers());

//乘

dfs(pokerList,num+1,operator.multiplication(count,Double.valueOf(p.getPokers())),ans+"*"+p.getPokers());

//除

dfs(pokerList,num+1,operator.division(count,Double.valueOf(p.getPokers())),ans+"/"+p.getPokers());

}

p.setFlag(false);

}

}

if(isFinish){

return ;

}

}

}



Operators.class


public class Operators {

private static Operatorsinstance;

private Operators(){

}

//防止过多地新建实例消耗内存,使用单例模式

public static Operators getInstance(){

if(null ==instance){

instance =new Operators();

}

returninstance;

}

public double plus(double a,double b){

return a+b;

}

public double minus(double a,double b){

return a-b;

}

public double multiplication(double a,double b){

return a*b;

}

public double division(double a,double b){

return a/b;

}

}



Test24.class

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;




public class Test24 {

public static void main(String[] args) {
int num = 0;
double count = 0;
String ans = "";
List<Poker> pokerList = new ArrayList<Poker>();
Scanner in=new Scanner(System.in);

for(int i=0;i<4;i++){
Poker p = new Poker(in.next());
pokerList.add(p);
}
Algorithm a = new Algorithm();
if(null!=pokerList.get(0)){
}
a.dfs(pokerList, num, count, ans);
if(!Algorithm.isFinish){
System.out.println("None");
}
}
}

0 0
原创粉丝点击