lyh不会打代码 2022-01-16 12:12 采纳率: 70%
浏览 15
已结题

下面代码哪里错误?请指示

题目描述
农夫John的农场里有很多小山丘,他想要在那里布置一些保镖去保卫他的那些相当值钱的奶牛们。
他想知道如果在一座小山丘上布置一名保镖的话,他总共需要招聘多少名保镖。他现在有一个用数字矩阵来表示地形的地图。这个矩阵有N行(1 < N < = 100)和M列( 1 < M < = 70) 。矩阵中的每个元素都有一个值H_ij(0 < = H_ij < =10,000)来表示该地区的海拔高度。
小山丘的定义是:若地图中一个元素所邻接的所有元素都比这个元素高度要小或等于(或它邻接的是地图的边界),则该元素和其周围所有按照这样顺序排列的元素的集合称为一个小山丘(本题某个非边界点跟它相邻的有8个点:上、下、左、右、左上、右上、左下、右下)。

输入
第1行:两个由空格隔开的整数N和M;
第2行到第N+1行:
第I+l行描述了地图上的第I行,有M个由空格隔开的整数:H_ij。

输出
一个整数,表示小山丘的个数。

样例输入
8 7
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0

样例输出
3

我的代码:


```c++
#include<iostream>
using namespace std;
bool flag=1;
int n,m,s,a[105][105],book[105][105],fx[10]={0,-1,-1,-1,0,0,1,1,1},fy[10]={-1,0,1,-1,1,-1,0,1};
void dfs(int x,int y)
{
    for(int i=1;i<=8;i++)
    {
        int nx=x+fx[i],ny=y+fy[i];
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m)
        {
            if(a[nx][ny]<=a[x][y]&&book[nx][ny]==0)
            {
                book[nx][ny]=1;
                dfs(nx,ny);
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(book[i][j]==0)
            {
                book[i][j]=1;
                flag=1;
                dfs(i,j);
                if(flag==1)
                {
                    s++;
                }
            }
        }
    }
    cout<<s;
}


不知如何修改。盼详细讲解,谢谢!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月24日
    • 创建了问题 1月16日

    悬赏问题

    • ¥15 如何让企业微信机器人实现消息汇总整合
    • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
    • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
    • ¥15 TLE9879QXA40 电机驱动
    • ¥20 对于工程问题的非线性数学模型进行线性化
    • ¥15 Mirare PLUS 进行密钥认证?(详解)
    • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
    • ¥20 想用ollama做一个自己的AI数据库
    • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
    • ¥15 请问怎么才能复现这样的图呀