首页 > 其他 > 详细

八向搜索问题(题目及答案源自洛谷用户题解的改编)

时间:2020-03-15 12:05:59      阅读:88      评论:0      收藏:0      [点我收藏+]
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=110;
 4 struct P
 5 {
 6     int x,y;
 7 }c[maxn];//记录路径
 8 char fz[maxn][maxn],stand[]="yizhong";//fz保存单词矩阵,stand保存“yizhong”便于匹配
 9 int vis[maxn][maxn];//保存路径,是否该点为答案
10 int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};//八向的常量数组
11 void dfs(int x,int y,P c[],int k,int cur)
12 {
13     if(cur==7)
14     {
15         for(int i=0;i<7;i++)
16             vis[c[i].x][c[i].y]=1;
17     }
18     else
19     {
20         int dx=x+dir[k][0];//沿着正确的k方向搜索
21         int dy=y+dir[k][1];
22         if(cur==6||fz[dx][dy]==stand[cur+1])
23         {
24             c[cur].x=x;c[cur].y=y;
25             dfs(dx,dy,c,k,cur+1);
26         }
27     }
28 }
29 int main()
30 {
31     int n;
32     cin>>n;
33     for(int i=0;i<n;i++)
34     cin>>fz[i];
35     memset(vis,0,sizeof(vis));
36     for(int i=0;i<n;i++)
37         for(int j=0;j<n;j++)
38             if(fz[i][j]==y) for(int k=0;k<8;k++)
39                 {
40                     int x=i+dir[k][0];
41                     int y=j+dir[k][1];
42                     if(fz[x][y]==i)
43                         dfs(i,j,c,k,0);
44                 }
45     for(int i=0;i<n;i++)
46     {
47         for(int j=0;j<n;j++)
48             if(vis[i][j]!=0) cout<<fz[i][j];
49             else cout<<"*";
50         cout<<endl;
51     }
52     return 0;
53 }

原题:

在一个puzzle中存在字符串"yizhong",找出全部的连续目标串并以‘*‘输出。

P.S. 若有侵权,请联系博主,我会尽快删除。

八向搜索问题(题目及答案源自洛谷用户题解的改编)

原文:https://www.cnblogs.com/lirunyi/p/12496430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!