欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

微软笔试题,机器人消砖块

发布时间:2025/6/17 编程问答 67 豆豆
生活随笔 收集整理的这篇文章主要介绍了 微软笔试题,机器人消砖块 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我比较傻叉,居然忘了用动态规划做,用了递归,各种边界判断,而且数组稍大一点就栈溢出。递归可以剪支,稍微减少一些递归次数。不管怎么样还是贴上自己的傻叉代码吧

#include<iostream> using namespace std;const int M = 10;///列 const int N = 10;///行 int min = N+M; char A[N][M]; ///d=1代表向下走,d=0代表向右走 void f(char A[N][M], int i,int j,int d, int result) {if (i == N-1&&j == M-1){if (result < min){min = result;}return;}if (d == 0) ///向右走{if (j + 1 <= M - 1) ///没走到边界{if (A[i][j + 1] == 'b') ///下一步是障碍物{f(A, i, j + 1, 0, result + 1); ///清楚障碍物if (i + 1 <= N - 1) ///走下面{if (A[i + 1][j] == '0'){f(A, i + 1, j, 1, result);}else{f(A, i + 1, j, 1, result + 1);}}}else{f(A, i, j + 1, 0, result); ///向右走if (i + 1 <= N - 1) ///向下走{if (A[i + 1][j] == '0'){f(A, i + 1, j, 1, result + 1);}else{f(A, i + 1, j, 1, result + 2);}}}}else ///已经向右行走到边界{///此处i+1<=N-1,否则应该在递归出口f(A, i + 1, j, 1, result);}}else 向下行走{if (i + 1 <= N - 1) ///下边依旧有路{if (A[i + 1][j] == 'b'){f(A, i + 1, j, 1, result + 1);///向右继续走if (j + 1 <= M - 1){if (A[i][j + 1] == '0'){f(A, i, j + 1, 0, result);}else{f(A, i, j + 1, 0, result + 1);}}}else {if (j + 1 <= M - 1){if (A[i][j + 1] == '0'){f(A, i, j + 1, 0, result + 1);}else{f(A, i, j + 1, 0, result + 2);}}f(A, i + 1, j, 1, result);}}else ///已经向下行走到边界{f(A, i, j + 1, 0, result);}} }/* int main() {for (int i = 0; i < N; i++){for (int j = 0; j < M; j++){A[i][j] = '0';}}A[0][4] = 'b';A[0][5] = 'b';A[2][5] = 'b';A[3][3] = 'b';A[3][4] = 'b';A[3][5] = 'b';A[2][6] = 'b';for (int i = 0; i < N; i++){for (int j = 0; j < M; j++){cout << A[i][j] << " ";}cout << endl;}f(A, 0, 0, 0, 0);cout << min << endl; } */

  

转载于:https://www.cnblogs.com/jinweiseu/p/5372963.html

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的微软笔试题,机器人消砖块的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。