題目描述
無限增長的貪吃蛇小遊戲:
在乙個n*m的迷宮中,有一條小蛇,地圖中有很多圍牆,猥瑣的出題者用「#」表示,而可以走的路用「.」表示,小蛇他隨機出生在乙個點上,出生點表示為「s」,他想抵達的終點表示為「e」,小蛇有乙個奇怪的能力,他每走一格便會增長一格,即他走了一格後,他的尾巴不會縮回。
小蛇想知道他怎麼到達他想去的地方,請你幫助他。
ps:每格長1公尺,貪吃蛇規定不能撞牆,不能咬自己的身體。
輸入描述:
第一行:輸入n,m;
第二行:輸入s的座標xs,ys,e的座標xe,ye;
後面的n行:
每行輸入m個數,描述每一行的情況。
輸出描述:
輸出乙個數,小蛇到達終點的最短距離(單位:cm),若無法達到,輸出-1
示例1輸入
複製3 3
1 1 3 3
.#..#.…輸出
複製400
示例2輸入
複製5 5
1 1 5 5
…###
.#….#.#.
.#.#.
…#.輸出
複製1400
備註:對於 100% 的資料:1\le n,m\le 1001≤n,m≤100 ,保證起點不是圍牆。
說一下內心的ruoruo的想法~
我還是太菜了
簽完到之後就來看這個題了
那個簽到的竟然錯了4次,該打,pia
這個題是乙個典型的模板題,dfs深搜純純的模板,題的大致意思是說有一條小蛇,從起點到終點,#是障礙物,. 是可以走的,求最短路徑,內心世界很複雜,因為我並不是很熟練
我的思路是把 # 和 . 轉化為 2 和 1,1是通路,2是障礙物,存到乙個陣列裡a[120][120],再加乙個v陣列記錄該點是否經過,0代表未訪問,1代表已訪問
#include
using
namespace std;
int a[
120]
[120];
//1 2-->障礙物
int n,m;
int xs,ys,xe,ye;
int minn=
99999999
;int v[
120]
[120];
//0-->未訪問 1-->訪問
int dx[4]
=;//對x來說的四個方向!
int dy[4]
=;//對y來說的四個方向
void
dfs(
int x,
int y,
int step)
for(
int k=
0;k<
4;k++)}
}int
main()
} v[xs]
[ys]=1
;//初始化為1;
dfs(xs,ys,0)
;//初始step=0
if(minn==
99999999
)printf
("-1");
else
printf
("%d"
,minn*
100)
;return0;
}
我調不過來,那我就在最後解釋一下dx dy陣列叭~
假設初始位置是x, y;
int dx[4]=;//對x來說的四個方向!
int dy[4]=;//對y來說的四個方向
往下走會變成(x+1,y);對應1,0
往左走會變成(x,y-1);對應0,-1
往上走會變成(x-1,y);對應-1,0
往右走會變成(x,y+1);對應0,1;
牛客多校第六場
d 題意感覺說的不是很清楚,一開始題意弄錯了,以為是最優的方案,結果是對於每個盒子這個 so clever 的人的做法是優先選擇盡可能大的物品裝完乙個盒子,我就不知道這個人 聰明了。思路 賽後知道題意後,5分鐘寫完,瞎暴力就一發過了,我自己都有點出乎意料真水了。includeusing namesp...
2019牛客多校第六場C(PAM)
傳送門 不會pam,建議看一下該部落格pam 維護乙個陣列,表示節點對於答案的貢獻 那麼如何計算這個值呢,首先我們需要知道它是由誰轉移而來的,比如該節點表示的是aabbbbaa,他是由abbbba轉移而來的,我們在計算aabbbbaa時首先要加上abbbba,然後還有一些fail邊連向的點首先我們來...
2020牛客多校第六場 K
題意 判斷給的序列是不是 任意1 n的全排拼接成序列的連續子串行 每乙個數字應該屬於的地方它只能出現一次。從任意點i開始,如果某個點在往後查詢的時候出現了兩次,那麼i點最多能夠延伸到那個地方。然後我們可以把每個點求一下最多能延伸到哪個點,直接記錄len。操作看 處理 由於k很大,可以到1e9,但是n...