思路:
先把地图二维字符数组存进去之后,遍历寻找到一个‘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; }
原文地址:https://www.cnblogs.com/zust-lms/p/12331805.html
时间: 2024-10-15 19:45:18