題目大意:
有乙個獨輪車,輪子上有5個不同的扇形顏色區域, 每個區域大小都是相等的(72°扇形)。 騎著這個車子在乙個廣場上行走。
廣場是有大小相同的正方形瓷磚鋪成的。 獨輪車從一塊瓷磚走向相鄰的一塊,輪子正好轉72°。只能走向相鄰的上、下、左、右的瓷磚。從乙個瓷磚走向下乙個瓷磚耗費1秒鐘。車子轉方向90°耗費1秒鐘,連轉180°就要費2秒鐘。白色的瓷磚可以走,黑色的不可以走(黑色的用"#「代替,白色的用」."代替)。
題目要求從標有s的地方走向標有t的地方。輪子在開始時,藍色是貼著地面的,要求到達終點時,也正好是藍色貼著地面的。
如果可以到達的話,輸出所需要的最短時間。否則輸出 destination not reachable。
思路:需要用到優先佇列,只是bfs不能得到答案。
**
#include
using
namespace std;
int dir[4]
[2]=
,,,}
;int m,n,start_x,start_y,end_x,end_y,step;30]
[30];
bool vis[30]
[30][
4][5
];struct node};
node beginn,q,t;
priority_queue que;
void
bfs(
)elseif(
!vis[t.x]
[t.y]
[i][t.color]
) que.
push
(t);
vis[t.x]
[t.y]
[i][t.color]
=true;}
}}}printf
("destination not reachable\n");
}int
main()
if[k]
=='t')}
}}beginn.x=start_x,beginn.y=start_y,beginn.color=
0,beginn.time=0;
beginn.dir=0;
if(cas!=
1) cout
("case #%d\n"
, cas++);
bfs();
}}
UVa 10603 BFS 優先佇列
題目鏈結 解題報告 lrj紫書中路徑尋找問題的例題。大部分細節書中都有說明,不再贅述。說一點自己的感想。書裡面說演算法的正確性不是顯然的,可是我覺得應該是顯然的吧?每次找到佇列裡dist值最小的狀態,以它來更新ans值,並且拓展其他狀態。假如當前我們找到了乙個恰好有某個瓶子裡的水為d公升的狀態p,現...
uva 10603 BFS 優先佇列
先吐槽下這兩天無限卡題,已經積了3道了。一籌莫展,只能先開一道稍微簡單點的。題意 這題就是加強版的倒水問題,把三個杯子分別含水量作為狀態,已經倒水的值作為距離。構建隱式圖,然後利用優先佇列寬搜其中記得時刻更新到達終點的最小距離。因為有可能無法到達目標狀態需要輸出離目標最近的。其實狀態還可進一步簡化,...
紫書uva 10603 優先佇列 bfs
這個題目其實是暴力的乙個典範,首先題目說了是最小倒水數,也就是總共次數中轉移水的數量,bfs是找最小次數的,因此要用優先佇列來改變優先順序,將最小倒水數優先,然後是處理如果找不到合適的d,我們要把所有能夠找到的值都存放在乙個陣列裡面,然後遍歷一次就可以了,我用的vis陣列是三維的,用來表示第1,2,...