• killing rabbits


    题:

    e.g.

    0 1 2 0 1

    3 2 0 0 2

    0 2 3 1 0

    2 3 0 0 2

    3 2 2 1 0

    1 是猎人 2 是兔子 3 是石头 0 是空白

    1猎人 从8个方向打2兔子

    算这个矩阵总共能打到多少只兔子

    还能连续打的,遇到 2 2 这样的

    思路:

    1)  统计原始地图上的兔子总数和所有猎人所在位置;

    2)  遍历每个猎人,每个猎人依此杀掉他当前可以杀掉的所有兔子;

    3) 最后大概剩下的兔子8个方向上都没有猎人或者被石头挡住之类的,统计剩下的兔子总数;

    4) 返回差值。

    //没编译过不知道哪里会不会出错的代码

    void killRabbits(pair<int,int> hunter, vector<vector<int>>& input) {
        int delta_in_directions[8][2]={{-1,-1}, {-1,0}, {-1,1}, {0,-1}, {0,1}, {1,-1}, {1,0}, {1,1}};
        for (int i=0; i<8; i++) {
            int current_r=hunter.first+delta_in_directions[i], current_c=hunter.second+delta_in_directions[i];
            while (current_r>=0&&current_r<N&&current_c>=0&&current_c<N) {
                if (input[current_r][current_c]==2)
                    input[r][c]=0;
                else if (input[current_r][current_c]!=0)
                    break;
                current_r+=delta_in_directions[direction];
                current_c+=delta_in_directions[direction];
            }        
        }
    }
    
    int RabbitsKilled(vector<vector<int>> input) {
        int N=input.size(), rabbits_count=0;
        vector<pair<int,int>> hunters;
        for (int r=0;r<N;r++) {
            for (int c=0;c<N;c++) {
                if (input[r][c]==1)
                    hunters.push_back(pair<int,int>(r,c));
                else if (input[r][c]==2)
                    ++rabbits_count;
            }
        }
        for (pair<int,int> hunter : hunters)
            killRabbits(input, hunter);
        int rabbits_remained_count=0;
        for (int r=0; r<N;r++) {
            for (int c=0;c<N;c++) {
                if (input[r][c]==2)
                    ++rabbits_remained_count;
            }
        }
        return rabbits_count-rabbits_remained_count;
    }
  • 相关阅读:
    测试用例编写方法
    mysql数据库在windows下安装与配置
    jQuery文字特效制作文字鼠标滑过多彩色变色显示
    基于浏览器的定位于搜索
    对不起,我又忍不住想你了
    痴语片言
    JQuery-Ajax后台提交数据与获取数据
    $.getJSON异步请求和同步请求
    七、多线程
    硬币收集问题--动态规划3
  • 原文地址:https://www.cnblogs.com/RDaneelOlivaw/p/10869123.html
Copyright © 2020-2023  润新知