牛客网---2016---美团拜访

来源:互联网 发布:udp广播 会堵塞网络吗 编辑:程序博客网 时间:2024/06/07 04:43

兔子今天把数据分析了一下,没有任何可以用于预测的信息,唯一能用的数据就是地理位置,其余并没有什么特别棒的,只能明天再找一个数据了,这个数据看了下貌似真的不行。。。就很难受。。。

这里写图片描述

题目:
现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。
给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
输入:
[[0,1,0],[2,0,0]],2,3
输出:
返回:2
解析:
1 . 根据小弟的理解,这个题考虑的肯定是最短路径,所以在我看来,实际上就是通过判断改点在那侧来决定他的走位,并且最多只能有两种走位方式,还要考虑-1不能走的情况。
2 . 经过分析,分成一下几种情况:
a. 推销员所在位置和商家所在位置不处于同一条直线上时,则有两种走路方式,结果+1,若有一个-1,则只有一种走路方式,结果不变,若两者均为-1,则没有走路方式,结果-1。
b. 推销员所在位置和商家所在位置处于同一条直线上,则只有一种走路方式,结果不变,若路口被-1堵死,则结果-1。
解题所需函数:
1 . 这段代码唯一重点的东西就是a>b?c:d;

// 满足条件是c,不满足条件是dint xMove = x1<x2?1:-1;int yMove = y1<y2?1:-1;

代码:

package test;import java.util.*;public class niuke {    // 默认有一条路,肯定有的嘛    static int count = 1;    public static void main(String[] args){        int [][]a={{1,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,2}};        int q=countPath(a,8,3);        System.out.println(q);    }    public static int countPath(int[][] map, int n, int m) {        // write code here        // 首先确定两个人物的位置        int startx=0,starty=0,endx=0,endy=0;        // 用于循环        int i,j;        for(i=0;i<n;i++){            for(j=0;j<m;j++){                if(map[i][j]==1){                    startx=i;                    starty=j;                }                if(map[i][j]==2){                    endx=i;                    endy=j;                }            }        }        // 开始走路了,当经理走不到商家地点时,就一直迭代嘛,蠢萌蠢萌的兔子决定使用迭代了        caluRes(map,startx,starty,endx,endy);        return count;    }    // 需要传递Map,起点和重点    private static void caluRes(int[][] map, int x1, int y1, int x2, int y2){        // 确认运动趋势,一行代码解决好几行代码的典型语句        int xMove = x1<x2?1:-1;        int yMove = y1<y2?1:-1;        if(x1!=x2 && y1!=y2){            //开始移动            if(map[xMove+x1][y1]==0 && map[x1][yMove+y1]==0){                // 有两条路可以选择                count++;                caluRes(map,xMove+x1,y1,x2,y2);                caluRes(map,x1,yMove+y1,x2,y2);            }else if(map[xMove+x1][y1]==-1 && map[x1][yMove+y1]==-1){                // 两条路都不可以走                count--;            }else if(map[xMove+x1][y1]==0){                // 有一条路可以走                caluRes(map,xMove+x1,y1,x2,y2);            }else{                caluRes(map,x1,yMove+y1,x2,y2);            }        }else if(x1==x2 && y1!=y2){            // 两个点处于同一条竖线上            if(map[x1][yMove+y1]==0){                caluRes(map,x1,yMove+y1,x2,y2);            }else if(map[x1][yMove+y1]==-1){                count--;            }else{                return;            }        }else if(y1==y2 && x1!=x2){            // 两个点处于同一条横线上            if(map[xMove+x1][y1]==0){                caluRes(map,xMove+x1,y1,x2,y2);            }else if(map[xMove+x1][y1]==-1){                count--;            }else{                return;            }        }else{            return;        }    } }

老娘表示这个代码放在eclipse里面是可以运行的,为啥他那边有问题,我也不知道为啥了,啧啧,明天在研究吧,我今天着急回家跑步。。。
没错,兔子的运动有在坚持,只是昨天狼人杀的有点爽,所以嘞,昨天没运动,今天必须要运动了,也吃不到饭了。。。

原创粉丝点击