深度优先之货物搬运路径

这是阿里的一道编程测试题, 找工作经常考察深度优先,阿里的这个测试题应该不算偏,是个基本的题目:

题目描述

给定一个mxn货架,标注重量,例如:
2 3 4 6 7 1
9 8 7 11 12 14
21 22 32 45 16 10

搬运员搬运时候有个习惯,每次搬运的时候都会比上一个货物要轻.每次搬运一个货物奖励1元,
按照这个原则球搬运员的最大收益.

题目分析

很显然是深度优先的题目,现在还没想到优化的方法,先按照最基本的,从每一个货物出发找出最长的路径,求这其中最大的.希望以后能够探索出更加优质的程序结构.

代码


#include<iostream>
#include<vector>
using namespace std;

bool test(vector<vector<int> > & thgs, int i , int j){
     if(i < thgs.size()&&i>=0&&j>=0 && j < thgs[0].size() && thgs[i][j]>0 )
        return true;
     return false;
}


//深度优先
int epath(vector<vector<int> >  &thgs, int i , int j){
    int maxpp = 0, res = 0; 
    int  delt[4][2] = {0,1,0,-1,1,0,-1,0};
    for(int ii =0 ; ii < 4; ii++){
        if(test(thgs,i+delt[ii][0],j + delt[ii][1])&&thgs[i+delt[ii][0]][j+ delt[ii][1]]< thgs[i][j]){
           int tp = thgs[i][j];
           thgs[i][j]=-1;
           res = epath(thgs , i+delt[ii][0] ,j + delt[ii][1])+1;
           maxpp = maxpp < res ? res : maxpp;
           thgs[i][j]=tp;
        }
   }
    return  maxpp; 
}

int main(){


// 构造输入
  int m ,  n ;
  cin >>m >> n;
  vector<vector<int> > things;

for(int i =0 ;  i < m ; i++)
{
    vector<int>  temp;
    for(int j =0 ; j< n ; j++)
    {
          int tt; cin >>tt;
          temp.push_back(tt);
    }
    things.push_back(temp); 
}
// 从不同的货物出发
int maxpp = 0;
for(int i =0 ; i < m ; i++)
{ 
   for(int j =0 ; j< n ; j++)
   {
      int res = epath(things, i ,j)+1;
      maxpp = maxpp > res? maxpp:res;
   }
}
  cout << maxpp;
}



转载于:https://www.cnblogs.com/xiaozhi007/p/7260690.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值