自用题解
查看原帖
自用题解
1650212
LY2345678楼主2025/2/7 15:31
#include<iostream>
#include<vector>
using namespace std;

//搜索方向
int dx[] = { -1,-1,-1,0,0,1,1,1 };
int dy[] = { -1,1,0,1,-1,-1,1,0 };

vector<vector<char>>search(vector<vector<char>>& map) {
	int rows = map.size();
	int cols = map[0].size();

	//用于存储结果,注意初始化
	vector<vector<char>>result(rows, vector<char>(cols,'0'));

	for (int i = 0; i < rows; i++) {
		for (int j = 0; j < cols; j++) {
			if (map[i][j] == '*') {
				result[i][j] = '*';
			}
			else {
				for (int k = 0; k < 8; k++) {
					int newRow = i + dx[k];
					int newCol = j + dy[k];
					//边界检查
					if (newRow >= 0 && newRow < rows && newCol >= 0 && newCol < cols) {
						if (map[newRow][newCol] == '*') {
							result[i][j]++;//因为初始化为0,所以直接自增即可
						}
					}
				}
			}
		}
	}
	return result;
}

int main() {
	int n, m; cin >> n >> m;
	vector<vector<char>>map(n, vector<char>(m));//初始化大小

	//创建雷图
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> map[i][j];
		}
	}

	vector<vector<char>>ans = search(map);//vector支持容器间直接赋值

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << ans[i][j];
		}
		cout << endl;
	}
}
2025/2/7 15:31
加载中...