java剪枝代码_α-β剪枝算法的java语言实现(非常实用)

import java.util.*;import java.io.*;public class AlphaBeta implementsInterface{final int MAX_INT=32767;final int MIN_INT=-32768;final int MAX=1; //极大节点

final int MIN=0; //极小节点

public classNode

{privateString name;private intvalue;private int leval;//节点判断极大层还是极小层

privateString pFather;private ArrayListpChildren;

Node(String name)

{this.name=name;

value=-1;

pFather=newString();

pChildren=new ArrayList();

}

}private ArrayListNodeTree;privateString jianzhi[];private intcount;public voidgetStrategy(String inputFile){

NodeTree=new ArrayList();

jianzhi=new String[20];

count=0;

readTree(inputFile);

Alph_Beta(NodeTree.get(0).name);

System.out.println(count);

String bestRoute="";for(int i=0;i

{if(NodeTree.get(0).value==NodeTree.get(search(NodeTree.get(0).pChildren.get(i))).value)

{

bestRoute=NodeTree.get(0).name+" "+NodeTree.get(0).value+" "+NodeTree.get(search(NodeTree.get(0).pChildren.get(i))).name;break;

}

}

System.out.println(bestRoute);for(int i=0;i

{

System.out.println(jianzhi[i]);

}

}voidAlph_Beta(String str)

{boolean flag=false;

Node nNode=NodeTree.get(search(str));if(nNode.leval==MAX)

{for(int i=0;i

{

Alph_Beta(nNode.pChildren.get(i));if(nNode.value

{

nNode.value=NodeTree.get(search(nNode.pChildren.get(i))).value;if(Beta(str))//是否在极大点出执行Beta剪枝

{

jianzhi[count]=str+":";for(int j=i+1;j

{

jianzhi[count]=jianzhi[count]+" "+nNode.pChildren.get(j)+" β剪枝 ";

flag=true;

}if(flag==true)

{

count++;

}return;

}

}

}

}else{for(int i=0;i

{

Alph_Beta(nNode.pChildren.get(i));if(nNode.value>NodeTree.get(search(nNode.pChildren.get(i))).value)

{

nNode.value=NodeTree.get(search(nNode.pChildren.get(i))).value;if(Alpha(str))

{

jianzhi[count]=str+":";for(int j=i+1;j

{

jianzhi[count]=jianzhi[count]+" "+nNode.pChildren.get(j)+" α剪枝";

flag=true;

}if(flag==true)

{

count++;

}return;

}

}

}

}

}booleanAlpha(String str)

{

Node nNode=NodeTree.get(search(str));if(nNode.pFather==null)

{return false;

}int i=search(nNode.pFather);while(i>=0)

{if((NodeTree.get(i).value>=nNode.value)&&(NodeTree.get(i).leval==MAX)&&((NodeTree.get(i).value!=MIN_INT)))return true;else{if(i!=0)

{

i=search(NodeTree.get(i).pFather);//其祖先节点

}else

break;

}

}return false;

}booleanBeta(String str)

{

Node nNode=NodeTree.get(search(str));if(nNode.pFather==null)

{return false;

}int i=search(nNode.pFather);while(i>=0)

{if((NodeTree.get(i).value<=nNode.value)&&(NodeTree.get(i).leval==MIN)&&((NodeTree.get(i).value!=MAX_INT)))return true;else{if(i!=0)

{

i=search(NodeTree.get(i).pFather);

}else

break;

}

}return false;

}public voidreadTree(String filename)

{

File file=newFile(filename);

String nodename[]=new String[10];try{

BufferedReader in=new BufferedReader(newFileReader(file));

String s;

s=in.readLine();if(s.startsWith("ROOT"))

{

nodename=s.split("\\s+");

}

NodeTree.add(new Node(nodename[1]));

NodeTree.get(0).leval=MAX;

NodeTree.get(0).value=MIN_INT;

NodeTree.get(0).pFather=null;while(!(s=in.readLine()).equals("VALUE"))

{

nodename=s.split("\\s+");for(int i=1;i

{

NodeTree.get(search(nodename[0])).pChildren.add(nodename[i]);

Node nNode=new Node(nodename[i]); //value为-1;

nNode.pFather=nodename[0];if(NodeTree.get(search(nodename[0])).leval==MAX)

{

nNode.leval=MIN;

nNode.value=MAX_INT;

}else{

nNode.leval=MAX;

nNode.value=MIN_INT;

}

NodeTree.add(nNode);

}

}

String nodeValue[]=new String[10];while(!(s=in.readLine()).equals("END"))

{

nodeValue=s.split("\\s+");

NodeTree.get(search(nodeValue[0])).value=Integer.parseInt(nodeValue[1]);

}

in.close();

}catch(Exception e){

System.out.println("Error!!");}

}intsearch(String str)

{for(int i=0;i

{if(NodeTree.get(i).name.equals(str))returni;

}return -1;

}public static voidmain(String argv[]){

String test= "test.txt";newAlphaBeta().getStrategy(test);

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值