题目描述
在一个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;
}