深度优先搜索——单词方阵
来源:互联网 发布:网络电视直播apk下载 编辑:程序博客网 时间:2024/06/05 05:48
洛谷 P1101 单词方阵
题目描述
给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。
分析
逐个点逐个方向搜索,没什么难的,重点在于往某方向搜索时不能临时改变方向,即循环要在外面
#include <iostream>#include <cstdio>using namespace std;char a[101][101],c[8]="yizhong";bool b[101][101],p;int n,i,j,k,s;void dfs(int x,int y,int w){ if (s==6) { p=true; b[x][y]=true; return; } s++; if (w==1&x+1<=n&a[x+1][y]==c[s]) dfs(x+1,y,w); if (w==2&x-1>=1&a[x-1][y]==c[s]) dfs(x-1,y,w); if (w==3&y+1<=n&a[x][y+1]==c[s]) dfs(x,y+1,w); if (w==4&y-1>=1&a[x][y-1]==c[s]) dfs(x,y-1,w); if (w==5&x+1<=n&y+1<=n&a[x+1][y+1]==c[s]) dfs(x+1,y+1,w); if (w==6&x+1<=n&y-1>=1&a[x+1][y-1]==c[s]) dfs(x+1,y-1,w); if (w==7&x-1>=1&y+1<=n&a[x-1][y+1]==c[s]) dfs(x-1,y+1,w); if (w==8&x-1>=1&y-1>=1&a[x-1][y-1]==c[s]) dfs(x-1,y-1,w); if (p) b[x][y]=true; s--;}int main(){ scanf("%d",&n); for (i=1;i<=n;i++) for (j=1;j<=n;j++) cin>>a[i][j]; for (i=1;i<=n;i++) for (j=1;j<=n;j++) if (a[i][j]=='y') for (k=1;k<=8;k++) { s=0; p=false; dfs(i,j,k); } for (i=1;i<=n;i++) { for (j=1;j<=n;j++) if (b[i][j]) printf("%c",a[i][j]); else printf("%c",'*'); printf("\n"); } return(0);}
0 0
- 深度优先搜索——单词方阵
- 普及练习场 深度优先搜索 单词方阵
- LintCode 132-单词搜索II 深度优先
- 洛谷Oj-单词接龙-深度优先搜索
- 搜索——深度优先搜索
- 【搜索】洛谷 P1101 单词方阵
- 组合算法——深度优先搜索
- DFS——深度优先搜索基础
- 深度优先搜索——毕业BG
- 深度优先搜索——迷宫
- 深度优先搜索——DFS遍历
- 走迷宫——深度优先搜索
- 图——深度优先搜索(Graph
- 算法思维——深度优先搜索
- 深度优先搜索—C—python
- DFS-深度优先搜索—2
- 深度优先搜索算法—DFS
- 图搜索——深度优先与广度优先
- OVS VxLAN Flow 分析
- 241. Different Ways to Add Parentheses
- python中的除法问题
- [Leetcode] #82#83 Remove Duplicates from Sorted List I & II
- 哥德巴赫猜想9位数验证
- 深度优先搜索——单词方阵
- Vue2.x踩坑与总结
- QTREE系列1,4,5,6,7 LCT
- 常用采样方法
- 函数的递归 与 函数的设计技巧
- php数组指针
- HDU3065【AC自动机-AC感言】
- ir.c
- 基于Opencv的视频人脸检测