美文网首页
1068 万绿丛中一点红 (20 分)

1068 万绿丛中一点红 (20 分)

作者: 79d12e22ec53 | 来源:发表于2019-07-22 14:15 被阅读0次
    #include <stdio.h>
    #include <math.h>
    
    #define LEN 1002
    
    int isUnique(int arr[][LEN], int x, int y, int TOL) {
        if (abs(arr[y][x] - arr[y-1][x-1]) <= TOL //左上
            || abs(arr[y][x] - arr[y][x-1]) <= TOL //左
            || abs(arr[y][x] - arr[y+1][x-1]) <= TOL //左下
            || abs(arr[y][x] - arr[y-1][x]) <= TOL //上
            || abs(arr[y][x] - arr[y-1][x+1]) <= TOL //右上
            || abs(arr[y][x] - arr[y][x+1]) <= TOL //右
            || abs(arr[y][x] - arr[y+1][x+1]) <= TOL //右下
            || abs(arr[y][x] - arr[y+1][x]) <= TOL) { //下
            return 0;
        }
        return 1;
    }
    int arr[LEN][LEN] = {0};
    int pixel[2 << 24] = {0};
    int main() {
        int M, N, TOL, cnt = 0;
        scanf("%d %d %d", &M, &N, &TOL);
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                scanf("%d", &arr[i][j]);
                pixel[arr[i][j]]++;
            }
        }
        int x, y, color;
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                if (pixel[arr[i][j]] == 1) {
                    if (isUnique(arr, j, i, TOL)) {
                        cnt++;
                        x = j;
                        y = i;
                        color = arr[i][j];
                        if (cnt == 2) {
                            break;
                        }
                    }
                }
            }
            if (cnt == 2) {
                break;
            }
        }
        if (cnt == 2) {
            printf("Not Unique\n");
        } else if (cnt == 0) {
            printf("Not Exist\n");
        } else {
            printf("(%d, %d): %d", x, y, color);
        }
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:1068 万绿丛中一点红 (20 分)

          本文链接:https://www.haomeiwen.com/subject/cnxwlctx.html