飞机票
题意:
思路:
搜索从y开始的八个方向看看能不能搜到yizhong搜到了就标机,然后输出标机的字符即可
#include<bits/stdc++.> using namespace std; const int maxn=105; int n; char c1[maxn][maxn]; char ans[8]={'y','i','z','h','o','n','g'}; int x1[9]={0,1,0,1,-1,0,-1,1,-1}; int y11[9]={0,0,1,1,0,-1,-1,-1,1}; bool f[maxn][maxn]; struct { int x,y; }mo[8]; bool jg(int x,int y){ if(x>=1&&x<=n&&y>=1&&y<=n){ return true; } else return false; } void dfs(int x,int y ,int cnt,int wx,int wy){ int i,j; if(cnt==6){ for(i=0;i<7;i++){ f[mo[i].x][mo[i].y]=1; } } if(wx==0&&wy==0){ for(i=1;i<=8;i++){ j=i; int xx=x+x1[i]; int yy=y+y11[j]; if(jg(xx,yy)==1&&c1[xx][yy]==ans[cnt+1]){ mo[cnt+1].x=xx,mo[cnt+1].y=yy; dfs(xx,yy,cnt+1,x1[i],y11[j]); } } } else { int xx=x+wx; int yy=y+wy; if(jg(xx,yy)==1&&c1[xx][yy]==ans[cnt+1]){ mo[cnt+1].x=xx,mo[cnt+1].y=yy; dfs(xx,yy,cnt+1,wx,wy); } } } int main() { int i,j,t; cin>>n; getchar(); for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ cin>>c1[i][j]; } } for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(c1[i][j]=='y'){ mo[0].x=i; mo[0].y=j; dfs(i,j,0,0,0); } } } for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(f[i][j]==0) cout<<"*"; else cout<<c1[i][j]; } cout<<endl; } return 0; }