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 6output1 3 4
.*.***2017 華東師範大學網賽......
這道題題意很簡單,就是給出起點和目標,要求放牆,到達的時間≥k就可以了,那麼顯然會想到,不一定非要考慮k,只要考慮怎麼放牆能讓這兩點之間的距離最長就可以了,就變成了求最長路的問題....
剛開始一直以為是dfs+bfs,dfs模擬放牆,bfs計算最短路驗證答案是否正確....然後測試發現這個**只能撐住6*6。
後來發現了一點...如果把整張圖開始的時候先放滿牆,去找一條路最長,那就發現並不需要bfs了...最長的那條路只要dfs就可以找出來,並且因為是通道,所以對每個點,它向外聯通的點最多只有兩個,那麼也就是說在dfs時,對當前點x,y,它的四個方向內只能有乙個vis[i][j]被標記過,這裡有一點要注意,要先判斷當前點聯通點是否超過1個再判斷是否到達終點,因為會存在在最後那個2*2的位置中轉了一圈但是因為到達了終點而沒有考慮牆的情況...可能說不太清,這裡給出一組資料,自己試一下就知道了...
8 8
8 8 36
.*...***
.*.*.***
.*.*....
.*.****.
.*.**...
.*.*..**
.*.*.*..
...*....
這組資料可以看到右下角那個2*2的格仔中四個點都是路,dfs過程中它的路徑就是
果然還是自己太菜...
做的題目太少了....題目並不難....那麼這裡放兩個**以供參考
【**】
[dfs+bfs]
#include #include #include #include #include using namespace std;
int ex,ey,k,n,m;
int vis[10][10];
int dis[10][10];
int dx[5]=;
int dy[5]=;
int a[10][10]=;
int bfs()
a[xx][yy]=0; }}
int main()
[dfs]ac**
#include #include #include #include using namespace std;
int vis[10][10]=;
int dx[5]=;
int dy[5]=;
int n,m,ex,ey,k,flag=0;
void dfs(int x,int y,int deep)
if (sum>1) return;
if (x==ex&&y==ey)
{ if (deep>=k)
{ for (int i=0;i=0&&yy>=0&&xx
2023年華東師範大學網路賽 E
e.黑心啤酒廠 time limit per test 1.0 seconds time limit all tests 1.0 seconds memory limit 256 megabytes accept submit 1184 4093 黑心啤酒廠為了讓大家買啤酒,會把一瓶酒設計成恰好能倒...
袋鼠媽媽找孩子 2017 華東師範大學網賽
思路 剛開始以為直接dfs搜尋到終點就可以了。我是剛開始將陣列全都定義為 然後深搜一條路。搜一步就將那一步改為 但是這樣會走出四個粘在一起的格仔,那裡就算四步,實際上那裡不是四步。後來想了下。得判斷什麼格仔可以走什麼格仔不可以走,乙個格仔只有到那裡的那個方向是 其餘三個都是 才能走。思路僅供參考不知...
華東師範大學2020 加密2
加密2 time limit 1000ms memory limit 30000kb total submit 179 accepted 103 description 對乙個整數 32位無符號整數 進行規則如下的加密 1.低16位和高16位互換 2.此時的低16位按位取反 3.此時的高16位與低1...