@[pengqiushi](/user/735164) 修改后代码如下:
```cpp
#include<iostream>
using namespace std;
char s[15]="yizhong";
char a[105][105];
int v[105][105];
int n;
void dfs(int x,int y,int xx,int yy,int c){
if(c==7){
int xxx=x-xx, yyy=y-yy;
for(int i=1; i<=7; i++) {
v[xxx][yyy]=1;
xxx-=xx,yyy-=yy;
}
return;
}
if(x==0||y==0||x==n+1||y==n+1)
return;
if(a[x][y]!=s[c])
return;
dfs(x+xx,y+yy,xx,yy,c+1);
return;
}
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++){
dfs(i,j,-1,-1,0);
dfs(i,j,-1,0,0);
dfs(i,j,-1,1,0);
dfs(i,j,0,-1,0);
dfs(i,j,0,1,0);
dfs(i,j,1,-1,0);
dfs(i,j,1,0,0);
dfs(i,j,1,1,0);
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++)
if(v[i][j]==1)
cout<<a[i][j];
else cout<<"*";
cout<<endl;
}
return 0;
}
```
by LyuCx @ 2023-07-24 21:53:35
@[pengqiushi](/user/735164) 问题有三个:
1. 倒数第6行,a[i][j]第二维漏打了
1. if(x==-1||y==-1||x==n+1||y==n+1)其实x=0或y=0的时候就已经超出边界了
1. if(c==7)这一段问题比较严重,请自行理解。至于为什么要放到最前面,是因为当c=7时这一位本就是不需要的(c=0~6时才是字符串里的内容),所以超出边界依然合法
by LyuCx @ 2023-07-24 21:59:52
@[LyuCx](/user/420995) 现在AC了,感谢您的指导。
by pengqiushi @ 2023-07-25 20:22:05