概率演算法實現八皇后問題 cpp

2022-07-31 21:06:14 字數 1538 閱讀 7393

#include #include #include #include #include #include #include #include using namespace std;

int n = 12;

bool backtrace(int &k, set&col, set&diag45, set&diag135, bool &success, vector&placecol);

void queenslv(bool &success, const int stepvegas);

int main()

}finish = clock();

//迴圈執行1000次成功的時間

duration = (double)(finish - start) / clocks_per_sec;

cout << "n = " << setw(3) << setiosflags(ios::left) << n;

cout << " stepvegas = " << setw(3) << setiosflags(ios::left) << stepvegas;

cout << " fail times = " << setw(6) << setiosflags(ios::left) << failcnt;

cout << " spend time = " << setw(6) << setiosflags(ios::left) << duration << " s" << endl;

}cout << endl;

n++;

}return 0;

}bool backtrace(int &k, set&col, set&diag45, set&diag135, bool &success, vector&placecol)

i++;

}if (i > n)

}//回溯結束條件

if (k == n + 1)

success = true;

else

success = false;

return success;

}void queenslv(bool &success, const int stepvegas)

}if (nb > 0)

else if (nb == 0)

}if (nb > 0 || stepvegas == 0)//stepvegas為0,純回溯或者隨機放置stepvegas行的皇后之後採用回溯法放置接下來的皇后。

else

success = false;

return;

}

比如19個皇后問題,演算法時間對比,stepvegas=0,表示純回溯法,可以看到stepvegas等於18時,即隨機放置18個皇后,再採取回溯法,效率是前者的幾百,上千倍,然後同數量級在n/2左右有6,皇后數量越多,概率演算法效率更加凸顯。一般最優 stepvegas不具規律性,但是一般在接近n/2附近,n為皇后數量。

演算法 八皇后問題

問題簡述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n1 n1,而皇后個數也變成n2。而且僅當...

演算法 八皇后問題

問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當n 1...

演算法 八皇后問題

created by xiaoyu on 2019 10 6.include include using namespace std const int n 8 int board n n int tot 0 int valid int x,int y for int i 0 i x i retur...