網上有很多關于pos機面試要求,「軟帝學院」的知識,也有很多人為大家解答關于pos機面試要求的問題,今天pos機之家(www.rcqwhg.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、pos機面試要求
pos機面試要求
八皇后問題,是一個古老而著名的問題,是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾于1848年提出:在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。1854年在柏林的象棋雜志上不同的作者發(fā)表了40種不同的解,后來有人用圖論的方法解出92種結果。
求解過程:
采用遍歷的辦法,就是采用將每種情況都驗證的辦法最終找出問題的解,但是蠻力遍歷的話,需要遍歷的數據量太大,計算時間花費太大,所以在遍歷的過程中使用回溯法去掉許多不可能的分支,使問題的規(guī)模減小許多。
一個可行解可以這樣表示,用一個數組pos[N](N表示皇后的個數,八皇后即為8)表示每一行的皇后應該放在第幾列。從將第一個棋子放在第1行的第1列開始一直遍歷完這個棋子固定在這個位置的所有解,然后再將第一行的棋子固定在第一行的第二列,再次遍歷完所有的解,直到第一行的棋子放在最后的一列,再遍歷完,那么所有的解就都找出來了。因為程序代碼中已經注釋非常詳細,所以這里不再重復注釋了。程序代碼如下:
#include <iostream>
#include <bitset>
using namespace std;
#define N 4 /*設置棋盤寬度*/
char pos[N]; /*每一行的這一個棋子放置的位置:0~7*/
bitset<N> stat[N]; /*每一行的空閑位置(除去被行列對角線沖突的位置)*/
bitset<N> mask[N][N]; /*保存回溯過程中以前的狀態(tài),因為在對每一行回溯時當時的狀態(tài)都不一樣
所以這個單元的大小是stat的N倍,以便保存N行各自的初始狀態(tài)*/
int g_count; /*統計有多少種解法*/
void print() /*打印出當前的可行解*/
{
int i, j;
cout<<endl;
for(i=0; i < N; i++)
{
for(j=0; j < pos[i]; j++)
cout<<" - ";
cout<<" $ ";
for(j=pos[i]+1; j < N; j++)
cout<<" - ";
cout<<endl;
}
}
void queen(int n) /*皇后問題求解函數*/
{
int i, j;
if(~stat[n] == 0) /*如果這一行沒有空閑位置,這個分支求解失敗*/
return;
for(i=0; i < N; i++)
{
if(!stat[n].test(i)) /*test(i)測試第i個bit是否為1,為1返回ture*/
{
pos[n] = i;
if(n+1 == N) /*找到一個解*/
{
print();
g_count++;
return;
}
for(j=n+1; j < N; j++)
{
mask[n][j] = stat[j]; /*進行新的遍歷前保存當前未探測行的空閑狀態(tài)*/
/*從j=n+1開始保存,前面j=0~n的位置已經保存過了,再保存意義也不大*/
stat[j].set(i); /*縱向標記非空閑位置*/
if(i+j-n < N) stat[j].set(i+j-n); /*正對角線方向標記非空閑位置*/
/*正對角線直線方程:I=kN+b(k=1)->i=n+b->b=i-n==>i-n+j即表示新的I值*/
if(i+n-j >= 0) stat[j].set(i+n-j); /*反對角線方向標記非空閑位置*/
/*反對角線直線方程:I=kN+b(k=-1)->i=-n+b->b=i+n==>-(j)+i+n即表示新的I值*/
}
queen(n+1); /*本行探測完畢,進行下一行的探測*/
for(j=n+1; j < N; j++)
stat[j] &= mask[n][j]; /*探測失敗,回退(返回上一次的狀態(tài))*/
}
}
}
int main(int argc, char* argv[])
{
int i,j;
g_count=0;
for(i=0;i<N;i++)
stat[i].reset();
for(i=0; i < N; i++)
for(j=0; j < N; j++)
mask[i][j].reset();
cout<<"result is:";
queen(0);
cout<<endl<<"總共有"<<g_count<<"種排法."<<endl<<endl;
system("pause");
return 0;
}
程序運行結果截圖:
最后,開發(fā)這么多年我也總結了一套學習Java的資料,如果你在技術上面想提升自己的話,可以關注我,私信發(fā)送領取資料或者在評論區(qū)留下自己的聯系方式,有時間記得幫我點下轉發(fā)讓跟多的人看到哦。
以上就是關于pos機面試要求,「軟帝學院」的知識,后面我們會繼續(xù)為大家整理關于pos機面試要求的知識,希望能夠幫助到大家!