網易程式設計題 逃脫地牢

2021-07-26 17:34:30 字數 2522 閱讀 7522

給定乙個 n 行 m 列的地牢,其中 『.』 表示可以通行的位置,』x』 表示不可通行的障礙,牛牛從 (x0 , y0 ) 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位置上。牛牛想知道最壞情況下,他需要多少步才可以離開這個地牢。

輸入描述:

每個輸入包含 1 個測試用例。每個測試用例的第一行包含兩個整數 n 和 m(1 <= n, m <= 50),表示地牢的長和寬。接下來的 n 行,每行 m 個字元,描述地牢,地牢將至少包含兩個 『.』。接下來的一行,包含兩個整數 x0, y0,表示牛牛的出發位置(0 <= x0 < n, 0 <= y0 < m,左上角的座標為 (0, 0),出發位置一定是 『.』)。之後的一行包含乙個整數 k(0 < k <= 50)表示牛牛合法的步長數,接下來的 k 行,每行兩個整數 dx, dy 表示每次可選擇移動的行和列步長(-50 <= dx, dy <= 50)

輸出描述:

輸出一行乙個數字表示最壞情況下需要多少次移動可以離開地牢,如果永遠無法離開,輸出 -1。以下測試用例中,牛牛可以上下左右移動,在所有可通行的位置.上,地牢出口如果被設定在右下角,牛牛想離開需要移動的次數最多,為3次。

輸入例子:

3 3

… …

… 0 1

4 1 0

0 1

-1 0

0 -1

輸出例子:

錯誤做法如下,利用動態規劃,每個位置儲存到達此位置的最短步數,這個思路的問題是,由於二維移動所以在第一遍遍歷所有點的時候會跳過一些點,這些點之後還有可能到達。這樣就會漏掉一些點。

#include 

#include

#include

#include

using

namespace

std;

int main()

}int start_cols, start_rows;

cin >> start_rows >> start_cols;

int step_num;

cin >> step_num;

vector

> step_vec(step_num, vector

(2, 0));

for (int i = 0; i != step_num; ++i)

vector

> dung_max_step(dungeon_rows, vector

(dungeon_cols, -1));

dung_max_step[start_rows][start_cols] = 0;

for (int i = start_rows; i != dungeon_rows; ++i)}}

}}

}for (int i = 0; i != start_rows; ++i)}}

}}

}int max_step = -1;

for (int i = 0; i != dungeon_rows; ++i)

if (max_stepcout

<< max_step << endl;

return

0;}

可以利用廣度優先搜素的方法進行計算

#include 

#include

#include

#include

#include

#include

using

namespace

std;

struct point;

point go(int m,int n)

};int main()

}int start_cols, start_rows;

cin >> start_rows >> start_cols;

int step_num;

cin >> step_num;

vector

> step_vec(step_num, vector

(2, 0));

for (int i = 0; i != step_num; ++i)

vector

> dung_max_step(dungeon_rows, vector

(dungeon_cols, int_max));

dung_max_step[start_rows][start_cols] = 0;

queue

que;

que.push(point(start_rows,start_cols));

while(!que.empty())}}

}int max_step=-1;

for (int i = 0; i != dungeon_rows; ++i)

if (dung_vec[i][j]=='.'&&max_stepcout

<< max_step << endl;

return

0;}

2017網易校招真題 地牢逃脫

地牢逃脫 時間限制 1秒 空間限制 32768k 熱度指數 8622 給定乙個 n 行 m 列的地牢,其中 表示可以通行的位置,x 表示不可通行的障礙,牛牛從 x0 y0 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能...

地牢逃脫 BFS

題意 給定乙個 n 行 m 列的地牢,其中 表示可以通行的位置,x 表示不可通行的障礙,牛牛從 x0 y0 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位置上。牛牛想知道...

68 地牢逃脫

個人水平有限,請見諒!給定乙個 n 行 m 列的地牢,其中 表示可以通行的位置,x 表示不可通行的障礙,牛牛從 x0 y0 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位...