百度机试:突出重围
来源:互联网 发布:java找工作好难 编辑:程序博客网 时间:2024/05/21 06:51
题目:输入M行N列的二维数组,只能是1或者0,从左下角到右上角去,只能往右、往左或往右上走,且不能去0的地方,输入M和N,然后输入M行N列,输出一共有多少种走法。
样例输入:
3 3
1 1 1
1 0 1
1 1 1
输出4
输入:
3 3
1 1 1
1 1 1
1 1 1
输出13
解题思路:
这种题目和和尚挑水问题很像,和八皇后问题类似,都需要用到回溯法,就是要用递归来做。我这里从右上角往左下角找(结果是一样的,按相反方向找),如果遇到1值,就从其三个方向继续找,找到符号的count值就加一,最后输出总的count值。
具体程序如下:
#include <iostream>using namespace std;int count;void getNum(int **num,int m,int n,int a,int b){if(m>=a || n>=b) return ;if(m==0 || n==0) count++;else if(m>0 && n>0 && m<a && n<b){if(num[m][n]==1){//一开始我想将遍历过的点置0,之后再置1,后来想想发现没必要,//因为其寻找是从其后面的开始的,不会再回过头来找,不过结果是一样的//num[m][n]=0;getNum(num,m-1,n,a,b);//num[m][n]=1;getNum(num,m,n-1,a,b);//num[m][n]=1;getNum(num,m-1,n-1,a,b);//num[m][n]=1;}}}int main(){int m,n;cin>>m>>n;int **num=new int*[m];for(int i=0;i<m;i++)num[i]=new int[n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){cin>>num[i][j];}}getNum(num,m-1,n-1,m,n);cout<<count<<endl;for(int i=0;i<m;i++)delete num[i];delete[] num;return 0;}
如果有错误,希望指正
0 0
- 百度机试:突出重围
- MySpace,如何突出重围?
- SOA能否突出重围
- 《突出重围》游戏源码
- 百度机试-度度熊回家
- 迅雷(XUNLEI)的工作原理揭密(续)---突出重围
- 电子商务突出重围:以小商品的名义而战
- 疾风知劲草——十年积累可助大连软件突出重围
- 经纬财富:巴中美联储措辞乐观 白银难突出重围
- 互联网硬件激烈暗战,乐视缘何突出重围?
- 宣雨松版《Unity3D游戏开发》最后章节实战《突出重围》逻辑整理
- 场景+定制成为互联网保险主流,谁能突出重围?
- 重度游戏热度居高不下,中轻度游戏如何突出重围?
- 百度机试—买帽子
- 端游与页游之战:微端网游突出重围
- (转)2017:整合欧美中小型资产管理公司的元年及如何突出重围
- 直击Java程序员阿里5轮B2B面试现场:我是如何突出重围的
- 百度
- GCD-ios 多线程
- LeetCode_OJ【185】Department Top Three Salaries
- jdbc 封装
- 复杂度之双边滤波算法的原理、流程、实现及效果。
- GCD创建单例的方法
- 百度机试:突出重围
- 白盒测试用例设计方法
- 谷歌新Logo如何做到只有305字节
- 浙江大学PAT_乙级_1042. 字符统计(20)
- static解析
- 单片机入门学习
- servlet的重定向错误
- 【特种兵PPT教程】如何用PPT动画制作超级玛丽?
- 2015百度笔试程序题兼职递归求解