• 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;
    }
  • 相关阅读:
    【BZOJ2288】生日礼物 [贪心]
    Tinyhttpd阅读笔记
    数据结构-图-经典算法(三)
    数据结构-图-经典算法(二)
    数据结构-图-经典算法(一)
    TCP协议的滑动窗口协议以及流量控制
    2016腾讯实习电话面试总结---2016-03-10
    B树,B+树,B*树
    平衡二叉树(AVL树)
    二叉搜索树(二叉查找树,二叉排序树)
  • 原文地址:https://www.cnblogs.com/RDaneelOlivaw/p/10869123.html
Copyright © 2020-2023  润新知