PAT B1068 万绿丛中一点红

#include<iostream>
#include<vector>
#include<map>
using namespace std;
int m, n, tol;//m行,n列
vector<vector<int>> pixel;
//8个方向
int dir[8][2] = { {0,-1},{0,1},{-1,-1},{-1,0},{-1,1},{1,-1},{1,0},{1,1} };
//判断与周围像素色差
bool judge(int x, int y) {
    for (int i = 0; i < 8; i++) {
        int near_x = x + dir[i][0];
        int near_y = y + dir[i][1];
        if (near_x >= 0 && near_x < m && near_y >= 0 && near_y < n && abs(pixel[x][y] - pixel[near_x][near_y]) <= tol)
            return false;
    }
    return true;
}

int main() {
    int cnt = 0, x = 0, y = 0;
    scanf("%d%d%d", &n, &m, &tol);//注意mn的前后顺序
    pixel.resize(m, vector<int>(n));
    map<int, int> cntMap;//像素是否唯一
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &pixel[i][j]);
            cntMap[pixel[i][j]]++;
        }
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (cntMap[pixel[i][j]] == 1 && judge(i, j)) {
                cnt++;
                x = i;
                y = j;
            }
        }
    }
    if (cnt == 1) {
        printf("(%d, %d): %d", y + 1, x + 1, pixel[x][y]);
    }
    else if (cnt == 0) {
        printf("Not Exist");
    }
    else {
        printf("Not Unique");
    }
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容