小青蛙用僅剩的體力值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...