問題 A 過河問題 搜尋樹

2021-10-11 01:39:23 字數 1334 閱讀 8335

多個囚犯參與者要過河,其中只有監管者一人可以划船。小船每次最多載兩人過河。監管者不在時,已有積怨的囚犯可能會鬥毆。請問他們該如何安全過河?

假設一開始所有人都在河的左岸,用0表示,如果成功過河,則到達河的右岸,用1表示。

請採用bfs求解,並輸出過河過程。

首先輸入要過河的人數n(包括監管者和囚犯)

接著輸入監管者的編號s(假設每個人的編號從0開始,編號最小的在最右邊)

然後輸入有積怨的囚犯的對數m

接下來m行,兩兩輸入有積怨的囚犯編號

如有解,輸出划船過河方案,即每一步的狀態,也就是每個人此時在河的左岸還是右岸。初始狀態全部為0。

否則,輸出no solution43

20 1

1 20000

1010

0010

1011

0001

1101

0101

1111

#include 

#include

#include <

set>

#include

#include

using namespace std;

int parentid[

99999];

string state[

99999];

set visit;

int front,rear;

int n,s,m;

set conf;

int isconf

(string cur)}}

return0;

}string bfs

(string& org,string&goal)

else

if(cur[i]

=='0')}

if(isconf

(cur)==0

&&visit.

count

(cur)==0

)}front++;}

return org;

}int main()

string ans=

bfs(org,goal)

; int path[

99999];

int cnt=0;

dowhile

(parentid[front]);

path[cnt++

]=front;

if(ans==org)

cout <<

"no solution"

;else

for(int i=cnt;i>=

0;i--

)}

過河問題(ACM

描述 在漆黑的夜裡,n 位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時...

青蛙過河問題

青蛙過河是乙個非常有趣的智力遊戲,其大意如下 一條河之間有若干個石塊間隔,有兩隊青蛙在過河,每隊有3 只青蛙,如 圖 10 19所示。這些 青蛙只能向前移動,不能向後移動,且一次只能有乙隻青蛙向前移動。在移動過程中,育蛙可以向 前面的空位中移動,不可一次跳過兩個位置,但是可以跳過對方乙隻青蛙進入前面...

貪心過河問題

過河問題 時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述在漆黑的夜裡,n位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,n個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,n人所需要的時間已知 ...