O泡泡 2023-04-06 20:06 采纳率: 100%
浏览 12
已结题

用C++实现dfs为什么没有输出

题目描述
在一个n行m列的方格图上有一些位置有地雷,另外一些位置为空。请为每个空位置标一个整数, 表示周围八个相邻的方格中有多少个
地雷。
输入描述
输入的第一行包含两个整数 n, m。第2行到第n+1海包含m个整数,相邻整数之间用一个空格分隔。如果对应的整数为0,示这一格没有地雷。如果对应的整数为1,表示这-格有地雷。中,1≤n,m≤100分钟后还是在当天。
输出描述
输出n行,每行m个整数,相邻整数之间用空格分隔。对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出9。

求问各位,这个代码为什么没有输出,初学dfs和C++,若犯低级错误望谅解。
我的代码如下:

#include <iostream>
using namespace std;

int n, m;
int map[105][105], a[105][105];
int dx[] = {-1, 1, 0, 0, -1, 1, -1, 1}, dy[] = {0, 0, -1, 1, -1, -1, 1, 1};

void dfs(int x, int y) {
  if (x < 1 || y < 1 || x > n || y > m)
    return;
  if (x == n && y == m) {
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++)
        cout << a[i][j] << " ";
    return;
  } else {
    int cnt = 0;
    if (map[x][y] == 1) {
      a[x][y] = 9;
    } else {
      for (int i = 0; i < 8; i++) {
        if (map[x + dx[i]][y + dy[i]] == 1)
          cnt++;
      }
      a[x][y] = cnt;
      for (int i = 0; i < 8; i++)
        dfs(x + dx[i], y + dy[i]);
    }
  }
}

int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      cin >> map[i][j];
  dfs(1, 1);
  return 0;
}
  • 写回答

2条回答 默认 最新

  • Dummer25 2023-04-06 20:43
    关注

    当搜索到终点时 (x == n && y == m),虽然输出了结果,但执行完毕后并没有进行任何操作直接结束了。所以程序并没有真正的输出结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?