C++对一个二维数组,从某个元素出发,若前后左右和这个元素相等,则变为“*”,以此类推,找出所有相邻的相等数字
时间: 2024-03-05 10:47:53 浏览: 57
c++将数组名作为函数参数对数组元素进行相应的运算
5星 · 资源好评率100%
好的,针对您的问题,您可以使用深度优先搜索(DFS)算法来遍历二维数组,找出所有相邻的相等数字。
具体实现如下:
1. 从给定的起点(x,y)开始遍历,如果当前位置的值等于起始位置的值,则将其标记为"*"。
2. 分别向上、下、左、右四个方向递归搜索,如果当前位置的值等于起始位置的值,则将其标记为"*"。
3. 重复步骤2,直到所有相邻的相等数字都被找出。
以下是示例代码,仅供参考:
```c++
#include <iostream>
using namespace std;
const int MAXN = 100;
int n, m;
int a[MAXN][MAXN];
int vis[MAXN][MAXN];
void dfs(int x, int y, int val) {
vis[x][y] = 1;
a[x][y] = '*'; // 标记为"*"
if (x > 0 && !vis[x-1][y] && a[x-1][y] == val) dfs(x-1, y, val);
if (x < n-1 && !vis[x+1][y] && a[x+1][y] == val) dfs(x+1, y, val);
if (y > 0 && !vis[x][y-1] && a[x][y-1] == val) dfs(x, y-1, val);
if (y < m-1 && !vis[x][y+1] && a[x][y+1] == val) dfs(x, y+1, val);
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> a[i][j];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (!vis[i][j]) dfs(i, j, a[i][j]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
注意:上述代码只是一种简单的实现方式,可能存在一些问题,您可以根据实际情况进行修改。
阅读全文