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 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!