思路:
先把地图二维字符数组存进去之后,遍历寻找到一个‘y’,然后我们可以设置一个八个方向的方向数组,让‘y’的坐标,遍历加上方向坐标,找到’i‘然后沿着这个方向,dfs下去,每次寻找到正确的,然后建立一个结构体存下点的坐标,然后设置bool数组标记坐标位置,最后再遍历输出,当bool数组为true时,正常输出,当bool数组为false时,输出’*‘。
代码如下:
#include<bits/stdc .h>
using namespace std; typedef long long ll; const int N = 100 10; struct node{ int x,y; }c[N]; char mp[N][N],stand[]="yizhong"; int vis[N][N]; int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; void dfs(int x,int y,node c[],int k,int cur) { if(cur==7) { for(int i=0;i<7;i ) vis[c[i].x][c[i].y]=1; } else { int dx=x dir[k][0]; int dy=y dir[k][1]; if(cur==6||mp[dx][dy]==stand[cur 1]) { c[cur].x=x; c[cur].y=y; dfs(dx,dy,c,k,cur 1); } } } int main() { int n; cin >> n; for(int i=0;i<n;i ) { scanf("%s",mp[i]); } memset(vis,0,sizeof(vis)); for(int i=0;i<n;i ) { for(int j=0;j<n;j ) { if(mp[i][j]==‘y‘) { for(int k=0;k<8;k ) { int x=i dir[k][0]; int y=j dir[k][1]; if(mp[x][y]==‘i‘) { dfs(i,j,c,k,0); } } } } } for(int i=0;i<n;i ) { for(int j=0;j<n;j ) { if(vis[i][j]==1) printf("%c",mp[i][j]); else printf("*"); } printf("n"); } return 0; }