首页 > 其他 > 详细

killing rabbits

时间:2019-05-15 15:36:57      阅读:90      评论:0      收藏:0      [点我收藏+]

题:

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;
}

 

killing rabbits

原文:https://www.cnblogs.com/RDaneelOlivaw/p/10869123.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!