_L.Y.H._ 2022-01-16 12:19 采纳率: 70%
浏览 34
已结题

请帮我看看下面代码哪里错误,详细指明!

题目描述
农夫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

我的代码如下:

#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;
}

盼详细解释,谢谢!

  • 写回答

1条回答 默认 最新

  • _L.Y.H._ 2022-01-19 17:31
    关注
    
    
    ```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;
    }
     
    
    

    ```

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

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 修改了问题 1月16日
  • 修改了问题 1月16日
  • 展开全部

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本