EOJ 3260 袋鼠媽媽找孩子

2021-08-01 02:30:39 字數 1931 閱讀 8407

time limit per test: 1.5 seconds

time limit all tests: 10.0 seconds

memory limit: 256 megabytes

袋鼠媽媽找不到她的孩子了。她的孩子被怪獸抓走了。

袋鼠媽媽現在在地圖的左上角,她的孩子在地圖第 x

行第 y

列的位置。怪獸想和袋鼠媽媽玩乙個遊戲:他不想讓袋鼠媽媽過快地找到她的孩子。袋鼠媽媽每秒鐘可以向上下左右四個方向跳一格(如果沒有牆阻攔的話),怪獸就要在一些格仔中造牆,從而完成乙個迷宮,使得袋鼠媽媽能夠找到她的孩子,但最快不能小於 k

秒。請設計這樣乙個迷宮。

第一行兩個整數 n,m

(1≤n,m≤

8),表示地圖的總行數和總列數。

第二行三個整數 x,y

,k(1≤

x≤n,

1≤y≤

m,x+

y>1)

。輸出乙個地圖,應正好 n

行 m列。

.表示空地,用*表示牆。袋鼠媽媽所在的位置和孩子所在的位置用.表示。

資料保證有解。

input

2 6

1 3 4

output

.*.***

......

比賽的時候出題人發布了公告,說這個題目是多組答案,只要給出任意乙個符合條件的答案,都會判為正確。

官方題解:

c. 袋鼠媽媽找孩子

由於資料範圍很小,直接搜尋就可以了。考慮 dfs,每乙個要走的格仔,周圍最多只能有一格(其實就是走過來的那一格)是走過的。全部搜一遍就結束了。

出題人:過的人少得不可思議。

比賽的時候沒有做出來,然後看了官方給的題解之後,有了思路。

思路詳述:

暴力求解,搜尋一條路徑,其從起點到終點的時間大於等於k。當然這個路不是隨便選的,走哪是需要條件判斷的。為了讓袋鼠媽媽沿著我深搜的符合條件的路徑走,

我需要採取一些措施,措施如下,假設當前袋鼠媽媽的位置為(x,y),假設她下一秒往右走,那麼我就要把(x,y)位置的上方,下方,左方都設成牆,這樣的話,

她別無選擇了,只能往右走了,同時保留其他三個方向的原始狀態,因為回溯的時候還要恢復那三個點的狀態。也就是說,搜尋方向有四個,如果朝某個方向走,

則除該方向外的其他方向直接封鎖,一直這樣進行下去,直到找到一條符合條件的路徑。在深搜中定義flag變數,標記是否已經找到一組解,當找到第乙個符合

意義而且也浪費時間。

#include#include#includeusing namespace std;

const int maxn = 10;

int map[maxn][maxn];

int dir[4][2] = ,,,};

///搜尋方向上、右、下、左。

int n,m;

int x,y,k;

bool flag;

///用於標記是否已經找到可行解。

/**以sx,sy為新起點進行搜尋,並且從起點到(sx,sy)

已經走了step步**/

void dfs(int sx,int sy,int step)

printf("\n");

}flag = true;

}return; ///找沒找到解都要返回

}for(int i = 0; i < 4; i++) ///進行四個方向的搜尋

dfs(tx,ty,step+1); ///以(tx,ty)為起點,進行深搜

map[tx][ty] = 0; ///回溯,變為0,代表該點沒有走過

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

}int main()

}

EOJ 3260 袋鼠媽媽找孩子 題解

題意 袋鼠媽媽找不到她的孩子了。她的孩子被怪獸抓走了。袋鼠媽媽現在在地圖的左上角,她的孩子在地圖第 x 行第 y 列的位置。怪獸想和袋鼠媽媽玩乙個遊戲 他不想讓袋鼠媽媽過快地找到她的孩子。袋鼠媽媽每秒鐘可以向上下左右四個方向跳一格 如果沒有牆阻攔的話 怪獸就要在一些格仔中造牆,從而完成乙個迷宮,使得...

EOJ 莫干山奇遇

出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...

費馬小定理 BZOJ3260 跳

題目大意 乙個二維平面。在這個平面內,如果當前跳到了 x,y 那下一步可以跳到以下 4個點 x 1,y x 1,y x,y 1 x,y 1 假設到達 x,y 需要耗費的體力用 c x,y 表示。對於 c x,y 有以下幾個性質 1 若x 0或者 y 0,則 c x,y 1。2 若x 0且 y 0,則...