yizhong
字符串,其它字符变为*
。y
这个字符,然后找找周围有没有i
字符,如果找到了,有戏!dfs!。yizhong
,若搜索完毕,则把每个字符所在的位置标记。//又是远古时期的码风...见谅
#include <iostream>
#include <cstdio>
using namespace std;
char m[110][110];
bool m_[110][110];
char k[8]="yizhong";
int n;
int x[7],y[7];
int dx[8]={0,0,-1,1,-1,-1,1,1};
int dy[8]={-1,1,0,0,-1,1,-1,1};
void dfs(int idx,int idy,int cnt,int f){
if(cnt==7){//找完了
for(int i=0;i<7;++i){//标记
m_[x[i]][y[i]]=true;
}
}else{
if(cnt==6||m[idx+dx[f]][idy+dy[f]]==k[cnt+1]&&idx+dx[f]<n&&idx+dx[f]>=0&&idy+dy[f]<n&&idy+dy[f]>=0){//如果下一个目标可行
x[cnt]=idx;
y[cnt]=idy;//记录
dfs(idx+dx[f],idy+dy[f],cnt+1,f);//继续搜索
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
cin>>m[i][j];
}
}//输入
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
if(m[i][j]==‘y‘){//如果看到了‘y‘
for(int p=0;p<8;++p){//康康有没有‘i‘
if(m[i+dx[p]][j+dy[p]]==‘i‘){//有,有戏!
dfs(i,j,0,p);//搜索,p是方向
}
}
}
}
}
for(int i=0;i<n;++i){//最后输出
for(int j=0;j<n;++j){
if(m_[i][j]==true){
cout<<m[i][j];
}else{
cout<<‘*‘;
}
}
cout<<endl;
}
return 0;
}
原文:https://www.cnblogs.com/FUXyao/p/12885569.html