迷宮與寶藏

2021-07-14 18:32:19 字數 1454 閱讀 3850

time limit:

2000ms memory limit:

65536kb

total submit:

28 accepted:

10 page view:

806submit

status

discuss

description

機械人要在乙個矩形迷宮裡行動(不能原地停留,只能走向上/下/左/右),每移動一格花費1個單位時間。

迷宮有以下幾種元素:

【*】 機械人的起點

【#】 牆。機械人不能走過這些格仔

【.】 平地。機械人可以在上面自由行走

【0-9】 寶藏。當機械人走到此處會立刻獲得該數字相應的寶藏,寶藏不會消失,可以反覆獲取(但不能停留)

若機械人要恰好獲得總和為x的寶藏,它最少需要多少時間?

input

第一行輸入任務數量t, 接下來有t個任務

每塊第一行有兩個整數, n( < 100), m( < 100), 表示迷宮有n+1行和m+1列,輸出迷宮地圖。

最後一行輸入你要收集的寶藏的總價值x(x ≤ 100)

output

對於每個任務,輸出最少花費的時間,如果完成不了該任務則輸出-1

3

2 31.#2

#..#

*.#.

32 3

2.#2

#..#

*.#.

52 3

2.#2

#.3#

*.#.

5

8

-16

tag

bfs

優先佇列

一道比較需要三維標記的bfs,因為除牆以外的其他點都可以任意訪問多次,所以需要三維標記vis[x][y][val],前兩維是座標,最後一維是訪問該點時所擁有的寶藏,當擁有不同的寶藏時可以訪問同乙個點。

#include #include#include#includeusing namespace std;

int vis[105][105][105];

char a[105][105];

int c[4][2]=;

struct l

;int main()}}

scanf("%d",&xx);

int fg=0;

while(!q.empty())

if(now.val>xx) continue; //當寶藏的值已經大於需要值時就不用再壓入其他點了,佇列中所剩的點都是大於需要時,佇列會壓空,最後結束迴圈

for(int i=0;i<4;i++)}}

}if(fg==0)

printf("-1\n");

}return 0;

}

swust 1646 迷宮與寶藏

機械人要在乙個矩形迷宮裡行動 不能原地停留,只能走向上 下 左 右 每移動一格花費1個單位時間。迷宮有以下幾種元素 機械人的起點 牆。機械人不能走過這些格仔 平地。機械人可以在上面自由行走 0 9 寶藏。當機械人走到此處會立刻獲得該數字相應的寶藏,寶藏不會消失,可以反覆獲取 但不能停留 若機械人要恰...

HLG 1286 迷宮與寶藏 廣搜

description 機械人要在乙個矩形迷宮裡行動 不能原地停留,只能走向上 下 左 右 每移動一格花費1個單位時間。迷宮有以下幾種元素 機械人的起點 牆。機械人不能走過這些格仔 平地。機械人可以在上面自由行走 0 9 寶藏。當機械人走到此處會立刻獲得該數字相應的寶藏,寶藏不會消失,可以反覆獲取 ...

XDOJ 分配寶藏

問題描述 兩個尋寶者找到乙個寶藏,裡面包含n件物品,每件物品的價值分別是w 0 w 1 w n 1 suma代表尋寶者a所獲物品價值總和,sumb代表尋寶者b所獲物品價值總和,請問怎麼分配才能使得兩人所獲物品價值總和差距最小,即兩人所獲物品價值總和之差的絕對值 suma sumb 最小。輸入說明 輸...