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

用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 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重