回溯法 八皇后問題(非遞迴)

2021-09-25 02:38:05 字數 891 閱讀 9368

//回溯法(試探法)---八皇后問題--非遞迴 

//列印一組解

/*#includeint col[8]=;

int left[15]=;

int right[15]=;

int q[8]=;

void queen(void)

} if(j==8) }}

int main()

else

} printf("\n");

} return 0;

}*///n皇后問題--列印第一組解

/*#include#define n 4//n皇后

int col[n]=;

int left[2*n-1]=;

int right[2*n-1]=;

int q[n]=;

void queen(void)

;int left[15]=;

int right[15]=;

int q[8]=;

int cnt=0;

void print()

else

} printf("\n");

} printf("\n");

}void queen(void)

} if(j==8||top==7)

i--;//因為i行不能放,所以i要減一,回到其上一行,這樣就可以進行下面步驟,抹掉當前行的皇后了

j=q[top--];//抹掉第i行的皇后

col[j]=left[i+j]=right[7+i-j]=0;//重置0,表示此列、斜線無皇后

j++;//跳過當前行 皇后,也就是抹掉了它,進而進行當前行下乙個位置的判斷

} }}int main()

八皇后問題 回溯 遞迴 回溯 非遞迴

八皇后問題 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。分析 我們可以嘗試在將第乙個皇后擺放在第0行第0列,為了不衝突,將第二個皇后擺放在第1行第3列 依次下去 然後發現第5行每個位置都有衝突,這說明上面4行肯定不能這麼擺放...

回溯 八皇后問題(遞迴和非遞迴)

8皇后問題 如何在 8 x 8 的西洋棋棋盤上安排 8個皇后,使得沒有兩個皇后能互相攻擊?如果兩個皇后處在同一行 同一列或同一條對角線上,則她們能互相攻擊。解向量為長度為8 的陣列,記為 solution 因為共有 8個皇后,而棋盤剛好為 8 8,所以每一行肯定會有乙個皇后,那麼我們約定 solut...

回溯法 八皇后問題的遞迴與非遞迴演算法

八皇后的問題非常有名,初次理解可能稍有難度,不過多看書,看部落格和 幾遍下來,也基本清晰。首先不用想初始的情況,先假設前面已經排列好了幾個皇后,即將排列下乙個皇后。依次遍歷八個位置,然後與之前的進行判斷這個位置是否可行,如可行則進行下乙個皇后,否則則移動位置繼續判斷。很簡單。但是有兩個個問題 1 不...