1. 程式人生 > 其它 >Spring框架中一個有用的小元件:Spring Retry

Spring框架中一個有用的小元件:Spring Retry

package A;

public class JosePhu {
public static void main(String[] args) {

//聽說八皇后問題面試經常問,能不能用貪心演算法把它給優化一下?
Method method=new Method();
method.check(0);
System.out.println("一共有多少種解法count="+method.count);
System.out.println("一共呼叫了多少次方法judgeCount="+method.judgeCount);
}
}

package A;

public class Method {
int max=8;
int[] array=new int[max];
int count=0;
int judgeCount=0;

public void print(){
count++;
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
}
//用來判斷這個點能不能放
public boolean judge(int n){
judgeCount++;
for (int i = 0; i < n; i++) {
//判斷是否在同一列||在同一斜線,驗算便知,這個很精妙,
// array的i不僅代表的是第幾個皇后(他是從第0個開始的),
// 又是代表的第幾行(也是第0個開始的,所以好像只在此情況下有用)
if (array[i]==array[n]||Math.abs(n-i)==Math.abs(array[n]-array[i])){
return false;
}
}
return true;
}
//開始放了
public void check(int n){//這裡n我帶進來的是0,所以就是二維陣列的第一行
if (n==max){//如果恰好能夠放滿8個皇后,就輸出,它用的是一維陣列
print();
System.out.println("----------------");
return;
}
for (int i = 0; i < max; i++) {
//先把當前這個皇后n,放到該行的第一列
array[n]=i;
//然後判斷能不能放,能的話就放下一個皇后
if (judge(n)){
//遞迴我認為還是先要能夠抽象理解,不要去窮舉,除非是你自己設計的
//n+1你知道是什麼嗎?這題本來是要用8行8列的,但是運用了遞迴就可以用一維陣列解決二維
// 陣列的問題了,所以n+1是代表下一行,你把它用8行8列的圖形來想象
check(n+1);
//如果這個check(n+1);衝突的話,就返回到上一級的check(n);的array[n]=i;然後i++
}
}
}
}