Curz酥 2022-03-17 16:06 采纳率: 90.9%
浏览 29
已结题

PAT乙级1068 万绿丛中一点红,不知道代码哪里错了?(语言-c++)

题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805265579229184

我的代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1111;
long long g[maxn][maxn];
int cnt = 0;
int M, N, TOL;
bool st[maxn][maxn];
bool istrue[maxn][maxn];
int dx[8] = {1, 1, 1, 0, -1, 1, 0, -1};
int dy[8] = {0, -1, 1, 1, 1, 1, 0, -1};

void judge(int x, int y){
    if((abs(g[x + 1][y] - g[x][y]) > TOL) and//如果四周都满足阈值差大于TOL 
    (abs(g[x - 1][y] - g[x][y]) > TOL) and 
    (abs(g[x + 1][y + 1] - g[x][y]) > TOL) and 
    (abs(g[x + 1][y - 1] - g[x][y]) > TOL) and
    (abs(g[x - 1][y - 1] - g[x][y]) > TOL) and
    (abs(g[x - 1][y + 1] - g[x][y]) > TOL) and
    (abs(g[x - 1][y - 1] - g[x][y]) > TOL) and
    (abs(g[x][y - 1] - g[x][y]) > TOL) and
    (abs(g[x][y + 1] - g[x][y]) > TOL)){  //就符合条件 
        ++cnt;    //符合条件的点加一 
        istrue[x][y] = true; //符合条件,istrue改变状态 
    }
}

void dfs(int x, int y){
    judge(x, y);    //判断这个点是否是“一点红” 
    for(int i = 0; i < 8; i++){//向四周搜索 
        int xx = dx[i] + x;
        int yy = dy[i] + y;
        if(xx >= 1 and xx <= M and yy >= 1 and yy <= N and !st[xx][yy]){
            st[xx][yy] = true;    //搜过了,改变状态 
            dfs(xx, yy);    //继续递归搜索 
        }
    }
}

int main(){
    //memset(g, 0x3f3f3f, sizeof g);
    cin >> M >> N >> TOL;    //分别输入列,行,阈值 
    for(int i = 1; i <= N; i++)    
        for(int j = 1; j <= M; j++)
            cin >> g[i][j];    
    dfs(1, 1);    //从起点(1,1)开始搜
    if(cnt > 1){    //“一点红”大于一个 
        cout << "Not Unique";    
    }
    else if(cnt == 0){    //没有“一点红” 
        cout << "Not Exist";
    }
    else{    //否则就输出 
        for(int i = 1; i <= N; i++)
            for(int j = 1; j <= M; j++){
                if(istrue[i][j]){    
                    printf("(%d, %d): ", i, j);
                    cout << g[i][j];
                }
            }
    }
    return 0;
}

我觉得我的思路挺正确的,就是dfs直接搜,可是最后只能拿到1分,想了很久不知道哪里错了,希望大家能帮忙找出错误下,十分感谢!

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2022-03-18 10:19
    关注

    没必要用递归吧,直接循环查找就可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月6日
  • 已采纳回答 10月29日
  • 修改了问题 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line