JAVA 树中 按最长路径行驶
来源:互联网 发布:linux 暴力破解 rar 编辑:程序博客网 时间:2024/04/29 15:48
private Vector findRoad(int posX,int posY,int dir){
Vector roadUPVec=null,roadRIGHTVec=null,roadDOWNVec=null,roadLEFTVec=null;
boolean tempUP=false,tempRIGHT=false,tempLEFT=false,tempDOWN=false;
int upNum=0,downNum=0,rightNum=0,leftNum=0,maxNum=0;
if(posY>0 && m_nowMap[posX][posY-1]!=0 && dir!=DIR_UP){
roadUPVec=new Vector();
roadUPVec.addElement(new Integer(posX));
roadUPVec.addElement(new Integer(posY-1));
Vector tempVec=findRoad(posX,posY-1,DIR_DOWN);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadUPVec.addElement(tempVec.elementAt(i));
}
}
else
tempUP=false;
if(posX<COLUMN-1 && m_nowMap[posX+1][posY]!=0 && dir!=DIR_RIGHT){
roadRIGHTVec=new Vector();
roadRIGHTVec.addElement(new Integer(posX+1));
roadRIGHTVec.addElement(new Integer(posY));
Vector tempVec=findRoad(posX+1,posY,DIR_LEFT);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadRIGHTVec.addElement(tempVec.elementAt(i));
}
}
else
tempRIGHT=false;
if(posY<ROW && m_nowMap[posX][posY+1]!=0 && dir!=DIR_DOWN){
roadDOWNVec=new Vector();
roadDOWNVec.addElement(new Integer(posX));
roadDOWNVec.addElement(new Integer(posY+1));
Vector tempVec=findRoad(posX,posY+1,DIR_UP);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadDOWNVec.addElement(tempVec.elementAt(i));
}
}
else
tempDOWN=false;
if(posX<0 && m_nowMap[posX-1][posY]!=0 && dir!=DIR_LEFT){
roadLEFTVec=new Vector();
roadLEFTVec.addElement(new Integer(posX-1));
roadLEFTVec.addElement(new Integer(posY));
Vector tempVec=findRoad(posX-1,posY,DIR_RIGHT);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadLEFTVec.addElement(tempVec.elementAt(i));
}
}
else
tempLEFT=false;
if(!tempUP && !tempRIGHT && !tempDOWN && !tempLEFT)
return null;
else{
if(roadUPVec!=null)
upNum=roadUPVec.size();
if(roadRIGHTVec!=null)
rightNum=roadUPVec.size();
if(roadDOWNVec!=null)
downNum=roadUPVec.size();
if(roadLEFTVec!=null)
leftNum=roadUPVec.size();
maxNum=rightNum;
if(upNum>maxNum)
maxNum=upNum;
if(leftNum>maxNum)
maxNum=leftNum;
if(downNum>maxNum)
maxNum=downNum;
if(maxNum==upNum)
return roadUPVec;
else
if(maxNum==downNum)
return roadDOWNVec;
else
if(maxNum==rightNum)
return roadRIGHTVec;
else
if(maxNum==leftNum)
return roadLEFTVec;
else
return null;
}
}
Vector roadUPVec=null,roadRIGHTVec=null,roadDOWNVec=null,roadLEFTVec=null;
boolean tempUP=false,tempRIGHT=false,tempLEFT=false,tempDOWN=false;
int upNum=0,downNum=0,rightNum=0,leftNum=0,maxNum=0;
if(posY>0 && m_nowMap[posX][posY-1]!=0 && dir!=DIR_UP){
roadUPVec=new Vector();
roadUPVec.addElement(new Integer(posX));
roadUPVec.addElement(new Integer(posY-1));
Vector tempVec=findRoad(posX,posY-1,DIR_DOWN);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadUPVec.addElement(tempVec.elementAt(i));
}
}
else
tempUP=false;
if(posX<COLUMN-1 && m_nowMap[posX+1][posY]!=0 && dir!=DIR_RIGHT){
roadRIGHTVec=new Vector();
roadRIGHTVec.addElement(new Integer(posX+1));
roadRIGHTVec.addElement(new Integer(posY));
Vector tempVec=findRoad(posX+1,posY,DIR_LEFT);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadRIGHTVec.addElement(tempVec.elementAt(i));
}
}
else
tempRIGHT=false;
if(posY<ROW && m_nowMap[posX][posY+1]!=0 && dir!=DIR_DOWN){
roadDOWNVec=new Vector();
roadDOWNVec.addElement(new Integer(posX));
roadDOWNVec.addElement(new Integer(posY+1));
Vector tempVec=findRoad(posX,posY+1,DIR_UP);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadDOWNVec.addElement(tempVec.elementAt(i));
}
}
else
tempDOWN=false;
if(posX<0 && m_nowMap[posX-1][posY]!=0 && dir!=DIR_LEFT){
roadLEFTVec=new Vector();
roadLEFTVec.addElement(new Integer(posX-1));
roadLEFTVec.addElement(new Integer(posY));
Vector tempVec=findRoad(posX-1,posY,DIR_RIGHT);
if(tempVec!=null){
for(int i=0;i<tempVec.size();i++)
roadLEFTVec.addElement(tempVec.elementAt(i));
}
}
else
tempLEFT=false;
if(!tempUP && !tempRIGHT && !tempDOWN && !tempLEFT)
return null;
else{
if(roadUPVec!=null)
upNum=roadUPVec.size();
if(roadRIGHTVec!=null)
rightNum=roadUPVec.size();
if(roadDOWNVec!=null)
downNum=roadUPVec.size();
if(roadLEFTVec!=null)
leftNum=roadUPVec.size();
maxNum=rightNum;
if(upNum>maxNum)
maxNum=upNum;
if(leftNum>maxNum)
maxNum=leftNum;
if(downNum>maxNum)
maxNum=downNum;
if(maxNum==upNum)
return roadUPVec;
else
if(maxNum==downNum)
return roadDOWNVec;
else
if(maxNum==rightNum)
return roadRIGHTVec;
else
if(maxNum==leftNum)
return roadLEFTVec;
else
return null;
}
}
- JAVA 树中 按最长路径行驶
- 【java】数字三角形最长路径
- 二叉树最长路径
- 树中的最长路径
- 树中最长路径 树形DP HDU 3534 Tree
- nowcoder 树上最长单色路径(最长路径,二叉树+dp)
- 二叉树的最长路径
- 二叉树的最长路径
- 二叉树的最长路径
- SPOJ_PT07Z 树最长路径问题
- 二叉树最长路径问题
- 二叉树的最长路径
- java-------------华为-----------字符串链接最长路径查询
- 仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)
- 最长路径
- 最长路径
- 中序和后序确定树结构 树最长路径 叶节点个数
- 二叉树中节点的最大距离(树的最长路径)——递归解法
- Delphi技巧--有“背景”的窗体 (转)
- NAntGUI 刚刚写了一个生成 NAnt .build 编译文件的小工具(三)
- FindWindowEX应用实例二则
- Delphi:易混淆的概念 (转)
- 最近疯狂迷恋Creamy Mami,不知道自己是疯了还是康复了……
- JAVA 树中 按最长路径行驶
- [水晶报表小技巧-开发-4]不显示报表直接打印
- 三次"博客"门派之争--转自南方周末
- Java如何调用外部命令?
- 暴露与偷窥--转自南方周末
- JDBC连接数据库经验集萃
- 韩国酷站超级大集合
- C# Idioms: Enum还是Enum Class(枚举类)
- "我一直惊讶于人们的创造力"--转自南方周末