今天看到了JohnsonTrotter算法,通过穷举来计算给定数据的全排列。
因为一点逻辑错误调了很久,所以在程序设计师设计模式方面还没有考虑很周到,以后会慢慢改进的。
实现代码如下:
package algorithm;
import java.util.ArrayList;
public class JohnsonTrotter {
public boolean isMoveExist(ArrayList<Vector> A){
boolean isExist = false;
for(int i = 0;i < A.size();i++){
if(i+A.get(i).direction>=0&&i+A.get(i).direction<A.size()&&A.get(i).value>A.get(i+A.get(i).direction).value){
isExist = true;
A.get(i).isMove = true;
}else{
A.get(i).isMove = false;
}
}
return isExist;
}
public int toSearchMax(ArrayList<Vector> A){
int maxIndex = Integer.MIN_VALUE;
int max = -1;
for(int i =0;i<A.size();i++){
if(A.get(i).isMove){
if(A.get(i).value>maxIndex){
maxIndex =A.get(i).value;
max = i;
}
}
}
//当前