#include using namespace std; const int N = 110; char a[N][N]; int b[N][N];//标识数组中i,j位置的字符是不是需要显示出原本的内容,还是显示星星 int n; //8个方向 int dx[] = {0, 0, -1, 1, -1, 1, -1, 1}; //上下左右 int dy[] = {1, -1, 0, 0, 1, 1, -1, -1}; //左下,右下,左上,右上 //坐标结构体 struct coord { int x, y; }; //目标串 string s = "yizhong"; //这条路线上是怎么记录所有点的 vector path; //深搜 //x,y:坐标 //step:准备查找第几个字符 //dir:哪个方向 void dfs(int x, int y, int step, int dir) { //找到所有的字符,表示成功,需要输出 if (step == s.size()) { //修改此路径中所有位置内容需要显示 for (auto p :path) b[p.x][p.y] = 1; return; } //下一个位置 int x1 = x + dx[dir], y1 = y + dy[dir]; //如果不出界,并且下一个字符与目标字符相等 if (x1 >= 1 && x1 <= n && y1 >= 1 && y1 <= n && s[step] == a[x1][y1]) { //加入路径中 path.push_back({x1, y1}); //继续探索 dfs(x1, y1, step + 1, dir); } } int main() { //输入 cin >> n; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) cin >> a[i][j]; //开始深搜 for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (a[i][j] == s[0]) { //找出所有可能的出发点 //8个方向都要派出侦查兵 for (int dir = 0; dir < 8; dir++) { //清空路径 path.clear(); //放入第一个起始点 path.push_back({i, j}); //深度搜索 dfs(i, j, 1, dir);//以i,j为第一个起点坐标,开始进行探索,这是第一个字符,dir代表方向 } } //输出 for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) if (b[i][j])cout << a[i][j]; else cout << "*"; cout << endl; } return 0; }