题目地址:这里
代码
#include <bits/stdc++.h>
using namespace std;
int n;char a[1100][1100];bool vis[1100][1100];string b="yizhong";
int dx[10]={1,0,1,-1,0,-1,1,-1};
int dy[10]={0,1,1,0,-1,-1,-1,1};
queue <pair<int,int> > q;
void dfs(int x,int y,int t){
if(t>=7){
while(true){
int n=q.front().first;int m=q.front().second;
q.pop();
if(n==-1)break;
vis[n][m]=true;
}
return;
}
for(int i=0;i<9;i++){
int tx=x+dx[i];int ty=y+dy[i];
if(a[tx][ty]==b[t+1]){
q.push(make_pair(x,y));
dfs(tx,ty,t+1);
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]==b[0]){
q.push(make_pair(-1,-1));
dfs(i,j,0);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(!vis[i][j]) cout<<"*";
else cout<<a[i][j];
}
cout<<endl;
}
}
思路有亿点点的奇怪