精華帖 八人過河的程式實現

2021-07-23 03:38:24 字數 2079 閱讀 8152

題目:

一家六口,乙個爸爸,乙個媽媽,倆兒子,倆女兒,還有乙個警察,乙個壞蛋,過一條河。

爸爸不在媽媽傷害兒子,媽媽不在爸爸傷害女兒,警察不在壞蛋傷害一家六口。

只有媽媽爸爸警察會開船,一次只能過兩個人,只有一艘船。

用程式實現怎麼過河。

思路見程式:

include#include #include using namespace std;

/*總體思路:用乙個9位的整數表示,當前所處的狀態,最高位表示河的左岸或者右岸。低8位依次表示警察,犯人,父親

母親,2個兒子,2個女兒;一次渡河可以看成是2個狀態之間的轉移。

總體分兩步進行;

step 1:先算出轉移矩陣

step 2:利用迪傑斯特拉算出,源點到終點最短路徑,所經歷的結點。

*/#define max 10000//結點間的最大值,表示兩個狀態不能轉換

#define n 512//表示狀態向量,以9bit值表示。eg:0 1111 1111表示開始狀態,所有的8個人在河的左岸。

const int lrmask=1<<8;//0表示在河的左岸,1表示在河的右岸。

const int cap= 1<<7;//表示警察的狀態

const int criminal=1<<6;//表示犯人的狀態

const int father=1<<5;//表示爸爸的狀態

const int mother=1<<4;//表示媽媽的狀態

const int son=3<<2;//表示兩個兒子的狀態

const int daughter=3;//表示兩個女兒的狀態

bool is_possible_state(int x)//判斷某個狀態是否滿足規則

bool is_possible_vec(unsigned char x)//判斷在船上的狀態

if ((x&criminal)&&(!(x&cap))&&(x&(father+mother+son+daughter)))//判斷該狀態是否滿足規則

return false;

if ((x&father)&&(!(x&mother))&&(x&daughter))

return false;

if ((x&mother)&&(!(x&father))&&(x&son))

return false;

else

return true;//滿足情況,返回true.

} void dijkstra(int v, int **dist,int d[n],int p[n],int s[n])

}

for(i=511; i<512; i++) //僅輸出從源點狀態0 1111 1111 到終點狀態 1 0000 0000的路徑

printf("<-%d \n", v);

} } int main()

else

matrix[i][j]=max;//表示節點間不相連

} }int d[n]=;//陣列d表示經過了幾個結點

int p[n]=;//陣列p儲存的是從源點到終點經過了那些結點

int s[n]=;//儲存已經找到的結點

int num=0;

dijkstra(255,matrix,d,p,s);//運用迪傑斯特拉演算法,初始狀態從0 1111 1111開始

}

題外話:這是面試某狗測試崗的課外作業。哈哈~~

霸面某狗,遇到乙個很nice的面試官,問的問題雖然回答的不是特別好,但是卻讓我大開眼界,原來類似智力題這麼好玩!!!哈哈~~

下午3點結束面試,拿到的題目——之前聽過沒做過的題目。來不及馬上做,又去趕另一家網際網路的面試。唉,一波面試向我襲來,有些措手不及。

晚上回去搜一下,原來是個小遊戲。哈哈,從沒想過自己能寫出個遊戲。

整個思考過程表示很痛苦,痛並快樂著。整個晚上很high,熬到夜裡3點多。。。竟然不感覺困。。。

因為剛開始思路有點繞路了,耽誤些時間,提交時間晚了2個多小時。所以,這可能也是沒通過的原因之一。

不過,找到了許久以來沒有的學習興趣與熱情。。。。哈哈,很nice!!!

oracle精華帖薈萃 絕對的好東西

關於大資料量的資料庫設計問題 ora 00904 識別符號無效 oracle 遠端訪問 mysql 分布式資料庫實踐經驗討論 資料庫定時掃瞄 經典 sql 語句收集 oracle 版 110 個 oracle 常用函式總結 行轉列通用過程 dblink 同步遠端帶 blob 欄位的表 乙個剔重 sq...

八人過河 程式 C

總體思路 用乙個9位的整數表示,當前所處的狀態,最高位表示河的左岸或者右岸。低8位依次表示警察,犯人,父親 母親,2個兒子,2個女兒 一次渡河可以看成是2個狀態之間的轉移。總體分兩步進行 step 1 先算出轉移矩陣 step 2 利用迪傑斯特拉算出,源點到終點最短路徑,所經歷的結點。define ...

7 56 方陣迴圈右移 10分 (我的精華帖)

本題要求編寫程式,將給定n n方陣中的每個元素迴圈向右移m個位置,即將第0 1 n 1列變換為第n m n m 1 n 1 0 1 n m 1列。輸入格式 輸入第一行給出兩個正整數m和n 1 n 6 接下來一共n行,每行n個整數,表示乙個n階的方陣。輸出格式 按照輸入格式輸出移動後的方陣 即輸出n行...