67 機械人的移動範圍

2021-07-04 07:28:14 字數 1543 閱讀 4865

題目:

地上有個m行n列的方格。乙個機械人從座標(0,0)的格仔開始移動,它每一次可以向左、右、上、下移動一格,但不能進入行座標和列座標的數字之和大於k的格仔。

例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7=18.但它不能進入方格(35,38),因為3+5+3+8=19.請問該機械人能夠達到多少格仔?

和上一題66 - 矩陣中的路徑類似,只是約束條件發生了改變。

當機械人在某乙個格仔時,它能夠向上下左右四個方向運動,當訪問周圍的格仔時,標記為已訪問,判斷該格仔座標是否滿足要求,滿足則計數加 1,否則計數加 0. 當遍歷完所有格仔時,計數完畢。

bool checknum(int row, int col, int threshold); // 檢查座標是否滿足要求

int movecountscore(int rows, int cols, int row, int col, bool* visited, int threshold);

int movecounts(int threshold, int rows, int cols)

bool* visited = new

bool [rows*cols]; //訪問記錄

for (int i = 0; i < rows*cols; i++)

visited[i] = false;

int counts = movecountscore(rows, cols, 0, 0, visited, threshold);

delete visited;

return counts;

}int movecountscore(int rows, int cols, int row, int col, bool* visited, int threshold)

return0;}

// 檢查座標是否,滿足要求

bool checknum(int row, int col, int threshold)

while (col != 0)

if (bit_sum <= threshold)

return

true;

else

return

false;

}

// ******************************== test code ******************************==

void test(char* testname, int threshold, int rows, int cols, int expected)

void test1()

void test2()

void test3()

void test4()

void test5()

void test6()

void test7()

void test8()

int main(int agrc, char* argv)

67 機械人的運動範圍

面試題67 機械人的運動範圍 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38...

機械人的移動範圍

時間限制 1秒 空間限制 32768k 熱度指數 28122 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。...

機械人運動範圍

題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...