滴滴筆試題

2021-07-22 20:20:28 字數 1509 閱讀 4815

小青蛙用僅剩的體力值p走地下迷宮。迷宮為乙個n*m的grid,每個位置為0或1,1代表可以走,0代表無法走。初始節點為(0,0),目的節點為(0,m - 1)(保證初始和目的都為1)。青蛙往上走時消耗體力值3,水平走消耗1,往下走不消耗體力值。計算青蛙能否用體力值p跳出迷宮。若不能跳出,輸出「can not escape」,否則輸出路徑。

輸入順序為n,m,p,接著n行m列是gird裡的數。

示例:4 4 10

1 0 0 1

1 1 0 1

0 1 1 1 

0 0 1 1

輸出:【0,0】,【1,0】,【1,1】,【2,1】,【2,2】【2,3】【1,3】【0,3】

不知道別人咋做的(感覺自己做的好複雜 = =),看到這題想起了曾做過的「積水的城市」,用的spfa,就是把每個節點a的鄰接節點儲存在該節點的listadjacience中,每個鄰接節點都有乙個p值,代表從a走到每個鄰接點需要消耗的體力值。然後通過遍歷,計算從源節點出發到每個節點的最小消耗體力值minp,用v[i][j].minp表示。最後判斷目的節點的minp是否小於等於p,若是,則輸出。

輸出的時候,用到了遍歷時加的last(last也是乙個節點)。當某節點改變minp,則它的上乙個節點last,必然是導致這個最小minp的上一節點,也必然是路徑的上一節點。最後從目的節點倒序輸出即可。

class vertex 

}public class main

} if (minp(grid) > p) system.out.println("can not escape !");

else print_ans(v[0][m - 1]);

in.close(); }

public static int minp(int a)

if (j > 0 && a[i][j - 1] == 1)

if (i < n - 1 && a[i + 1][j] == 1)

if (j < m - 1 && a[i][j + 1] == 1) }}

} queuequeue = new linkedlist();

v[0][0].minp = 0;

queue.add(v[0][0]);

v[0][0].isinqueue = true;

vertex former = null; // former保證了路徑不走回頭路,比如a節點的鄰節點為b,遍歷b的鄰節點時要排除掉a點

while(!queue.isempty()) } }

former= s;

}} return v[0][m - 1].minp;

} // 列印結果

public static void print_ans(vertex v)

for (int i = re.size() - 1; i > 0; i--)

system.out.println("[" + re.get(0)[0] + "," + re.get(0)[1] + "]");

}}

滴滴筆試題 冪運算

時間限制 1秒 空間限制 131072k 給定兩個數r和n,輸出r的n次方,其中0.0輸入描述 多組測試用例,請參考例題的輸入處理 輸入每行乙個浮點數 r 其中0.0 r 99.999,乙個整數 n 其中0 n 25輸出描述 輸出r的n次方輸入例子1 95.123 12 0.1 1輸出例子1 548...

劍指Offer 滴滴筆試題 知識點總結

劍指offer 滴滴筆試題 知識點總結 情景回顧 地點 山東省網路環境智慧型計算技術重點實驗室 事件 滴滴筆試 總體來說,滴滴筆試內容體量不算多,主要分為19道選擇題 1道多選題,2道程式設計題 1道簡答題 也不簡單 選擇題 考查知識點 二叉樹某層中節點個數 2i 1 費波納茨數列應用 上9級台階的...

滴滴面試題

1 快速排序和二分排序選乙個手寫。手寫了乙個快排。2 手寫乙個 eventemitter。3 手寫兩個陣列的交集。兩層 for 迴圈。將兩陣列排序後,使用雙指標去判斷。4 webpack 執行流程,seal 方法之後都有什麼?什麼時候生成 chunk 5 ts 中 thistype 是什麼?this...