多個囚犯參與者要過河,其中只有監管者一人可以划船。小船每次最多載兩人過河。監管者不在時,已有積怨的囚犯可能會鬥毆。請問他們該如何安全過河?
假設一開始所有人都在河的左岸,用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人所需要的時間已知 ...