題解 牛客寒假基礎演算法訓練營5 C 炫酷迷宮

2021-09-11 09:06:03 字數 1398 閱讀 6092

題目鏈結在這裡

鑑於有的讀者可能看不到題目,這裡我就複述一下,具體就是如果構造乙個n*m的矩陣,使得從某兩個點之間的最短距離為k。障礙用』x』表示,路用』.'表示。

怎麼做呢,可以看出來,這又是乙個構造的題目。

在矩陣裡面,我們可以感受一下,曲折的路線是最長的,所以我們就構造曲折的路徑,然後在構造好的圖上跑一下bfs求一下距離為k的點在哪,輸出就好啦!

至於為什麼曲折的路線就是最長的, 還有沒有更長的構造方法呢,其實筆者也不知道,但是這樣寫確實ac了,所以筆者猜測,曲折的構造就是最長的構造方法。

不過我們不知道橫著還是豎著構造更好,我們就兩種構造方法都試一下,然後我們在路徑比較長的那個圖上跑bfs就好啦。

下面是**:

#include

using

namespace std;

const

int maxn =

1010

;char g1[maxn]

[maxn]

,g2[maxn]

[maxn]

,g[maxn]

[maxn]

;bool vis[maxn]

[maxn]

;int dx=

;int dy=

;int n,m,k;

struct node

;void

bfs(

int x,

int y));

vis[x]

[y]=1;

while

(!q.

empty()

)for

(int i=

0;i<

4;i++))

;}}}

}int

main()

else g1[i]

[j]=

'x';}}

for(

int i=

2;i<=n;i+=4

)for

(int i=

4;i<=n;i+=4

)for

(int i=

1;i<=m;i++

)else g2[j]

[i]=

'x';}}

for(

int i=

2;i<=m;i+=4

)for

(int i=

4;i<=m;i+=4

)if(cnt<0)

}}else}}

printf

("1 1\n");

bfs(1,

1);for

(int i=

1;i<=n;i++

)printf

("\n");

}return0;

}

牛客寒假演算法基礎演算法訓練營2

1 座與重修費 題目描述 期末考試結束了,座發現很多人掛了大物,只能等著第二年重修,還要交400元的重修費。座突然想起有個學長和他講過,如果學校哪一年缺錢了,那一年的大物試卷就會特別難。現在 座有了所有人的成績,座想知道如果所有掛科的人都在第二年重修,學校能賺多少重修費?掛科是指一門課的分數小於60...

牛客寒假演算法基礎訓練營6

早知道這次題目這麼簡單就認真做了,最後一場沒心做,後面懶得想了,唉罪過罪過 1 煤氣灶 題目描述 小j開始打工,準備賺錢買煤氣灶。第一天,小j的工資為n元,之後每天他的工資都比前一天多d元。已知煤氣灶需要m元,求小j最少工作幾天才能買到煤氣灶。輸入描述 四個整數 n,m,d,x 分別表示小j第一天的...

牛客寒假訓練營5 F

題目傳送門 又到了開心的2小時過6題三小時卡一題的環節 太菜了 qwq 這一切一切的原因是什麼呢?ta這個小 zhi 機 zhang 靈 er 鬼 tong 把這句話看丟了 首 du 見 cuo 這道題的ta就很興奮的認為這不就是乙個組合數嘛 然後就寫了半天組合數 對dp的敏銳程度還不夠 寫組合數就...