关闭

[华为机试真题]73.公交站寻址

标签: 华为机试真题
1715人阅读 评论(0) 收藏 举报

题目

一个N*N二维矩阵代表城市布局,元素值只有’.’,’X’ , ‘B’ , ‘S’,X代表当前位置,B代表路障,S代表公交站,’.’代表可行的路径。
现给定路径长度Y,找到能够到达的公交站的个数,路径中不能包含路障。
路径长度定义:
节点与其自身的距离为0
节点与其上、下、左、右四个相邻节点距离都为1

要求实现函数

int FindStat (const char *Map, unsigned int iArrN, unsigned int iPathLen)

输入

Map:           城市布局
iArrN:         城市布局矩阵的行数
iPathLen: 给定的路径长度

输出

返回

能够到达的公交站个数

注:输入矩阵是以一维形式保存的二维数组,

代码

/*---------------------------------------
*   日期:2015-07-07
*   作者:SJF0115
*   题目:公交站寻址
*   来源:华为机试真题
-----------------------------------------*/
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

/*
S...S
.....
....B
S...S
....X

*/
// map             城市布局
// len             给定的路径长度
// index           路径的第几步
// visited         是否已经访问
// count           能够到达的公交站个数           
void DFS(vector<vector<char> > &map,int len,int index,int x,int y,vector<vector<bool> > &visited,int &count){
    int row = map.size();
    int col = map[0].size();
    // 超出规定路径长度
    if(index == len+1){
        return;
    }//if
    // 越界
    if(x < 0 || y < 0 || x >= row || y >= col){
        return;
    }//if
    // 路障
    if(map[x][y] == 'B'){
        return;
    }//if
    // 找到一个未曾到达的汽车站
    if(map[x][y] == 'S' && !visited[x][y]){
        visited[x][y] = true;
        cout<<"可以到达("<<x<<","<<y<<")汽车站"<<endl;
        ++count;
    }//if

    // left
    DFS(map,len,index+1,x,y-1,visited,count);
    // right
    DFS(map,len,index+1,x,y+1,visited,count);
    // up
    DFS(map,len,index+1,x-1,y,visited,count);
    // bottom
    DFS(map,len,index+1,x+1,y,visited,count);
    //visited[x][y] = false;
}
// Map          城市布局
// row          城市布局矩阵的行数
// len          给定的路径长度
int FindStat (const char *Map, unsigned int row, unsigned int len){
    int size = strlen(Map);
    int col = size / row;
    // 转换为矩阵
    vector<vector<char> > map(row,vector<char>(col,'.'));
    for(int i = 0;i < size;++i){
        map[i / col][i % col] = Map[i];
    }//for
    int count = 0;
    vector<vector<bool> > visited(row,vector<bool>(col,false));
    // 搜索
    for(int j = 0;j < row;++j){
        for(int k = 0;k < col;++k){
            if(map[j][k] == 'X'){
                DFS(map,len,0,j,k,visited,count);
                break;
            }//if
        }//for
    }//for
    return count;
}

int main(){
    char map[1000];
    int row;
    int len;
    //freopen("C:\\Users\\Administrator\\Desktop\\acm.txt","r",stdin);
    while(cin>>map>>row>>len){
        cout<<FindStat(map,row,len)<<endl;
    }//while
    return 0;
}
0
0
查看评论

华为编程大赛--公交站寻址

3.公交站寻址(50分) l  问题描述 一个N*N二维矩阵代表城市布局,元素值只有’.’,’X’ , ‘B’ , ‘S’,X代表当前位置,B代表路障,S代表公交站,’.’代表可行的路径。 现给定路径长度Y,找到能够到达的公交站的个数,路径中不能包含路障。 路径长度定...
  • luomingmin
  • luomingmin
  • 2014-03-25 10:34
  • 659

华为编程大赛——公交站寻址

问题描述 一个N*N二维矩阵代表城市布局,元素值只有’.’,’X’ , ‘B’ , ‘S’,X代表当前位置,B代表路障,S代表公交站,’.’代表可行的路径。 现给定路径长度Y,找到能够到达的公交站的个数,路径中不能包含路障。 路径长度定义: 节点与其自身的距离为0 节点与其上、下、左、右四...
  • u011846436
  • u011846436
  • 2014-07-29 15:34
  • 354

leetcode_question_73 Set Matrix Zeroes

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow up: Did you use extra spac...
  • doc_sgl
  • doc_sgl
  • 2013-09-19 21:47
  • 4311

LeetCode --- 73. Set Matrix Zeroes

题目链接:Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow up: Did you use extra s...
  • makuiyu
  • makuiyu
  • 2015-03-20 21:50
  • 1483

2014华为机试真题(2)

1.数字是否存在相同部分         求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。   &...
  • qianhen123
  • qianhen123
  • 2015-08-14 22:01
  • 1263

2014华为机试真题(1)

1.及格线问题 10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: (1) 及格线是10的倍数; (2) 保证至少有60%的学生及格; (3) 如果所有的学生都高于60分,则及格线为60分 #include using namespace std; /**************...
  • qianhen123
  • qianhen123
  • 2015-08-10 22:57
  • 632

华为机试--最高分是多少

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数...
  • xiaguangzhiying
  • xiaguangzhiying
  • 2016-07-09 22:02
  • 701

2016年华为机试题

这题其实超级简单,可能是由于第一次参加机试,有点紧张,也没有什么经验,看到题干太长就没有耐心看下去。导致这题没做出来,现在整理的时候,其实挺简单的。 在二进制位图数据中,通常1是稀疏的。在位图压缩的算法中,有一种算法叫做游程编码,它用一个子串代替连续的0达到压缩的目的。其中一个常用的方法叫做分段长度...
  • smallfish_love
  • smallfish_love
  • 2016-08-24 10:55
  • 2052

leetcode 73. Set Matrix Zeroes-矩阵置零|数组

原题链接:73. Set Matrix Zeroes 【思路-Java】T=O(n)|M=O(n) 建立一个大小为 n 的数组,用于记录第 j 列是否出现0 public class Solution { public void setZeroes(int[][] matrix) { ...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016-06-03 16:47
  • 914

2015华为上机练习《朋友圈转发消息》

在一个社交应用中,两个用户设定朋友关系后,则可以互相收到对方发布或转发的信息。当一个用户发布或转发一条信息时,他的所有朋友都能收到该信息。   现给定一组用户,及用户之间的朋友关系。 问:当某用户发布一条信息之后,为了让每个人都能在最早时间收到这条信息,这条信息最少需要被转发几次? ...
  • fanjiaxia
  • fanjiaxia
  • 2014-09-10 19:50
  • 378
    个人资料
    • 访问:1513430次
    • 积分:22566
    • 等级:
    • 排名:第379名
    • 原创:624篇
    • 转载:133篇
    • 译文:60篇
    • 评论:189条
    博客专栏
    文章分类
    最新评论