洛谷 P1101 【单词方阵】题解

来先写一下思路:

1.一一枚举开始的位置

2.朝8个方向搜索(其实不如说是递归)

3.在搜索到后标记搜索到了

4.通过标记在搜索完成后再标记哪些地方是“yizhong”

5.输出

严格来说,此题不算是深搜,到不如说是递归,因为只需要往前探路,不需要回溯,下面是代码:

#include<iostream>
#include<cstdio>
using namespace std;
int pd,wx[9] = {0,-1,-1,0,1,1,1,0,-1},wy[9] = {0,0,1,1,1,0,-1,-1,-1},n,b[101][101];
char st[101][101],dc[9] = " yizhong";
void search(int x,int y,int a,int step){
if(step>7){
pd = 1;
return;
}
if(st[x][y]!=dc[step]||x<1||x>n||y<1||y>n) return;
search(x+wx[a],y+wy[a],a,step+1);
if(pd) b[x][y] = 1;
}
int main(){
freopen("testdata.in","r",stdin);
cin>>n;
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
cin>>st[i][j];
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
for(int z = 1;z<=8;z++){
pd = 0;
search(i,j,z,1);
}
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
if(!b[i][j]) st[i][j] = ‘*‘;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++)
cout<<st[i][j];
cout<<endl;
}
return 0;
}

总而言之,此题不算特别难,觉得不如单词接龙,先比之下,此题就较水了,希望对你有帮助!

原文地址:https://www.cnblogs.com/ctc20050412/p/8732814.html

时间: 2024-11-14 02:20:59

洛谷 P1101 【单词方阵】题解的相关文章

洛谷——P1101 单词方阵

https://www.luogu.org/problem/show?pid=1101#sub 题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母.输出时,将不是单词的字母用“*”代替,以突出显示单词.例如: 输入: 8 输出: qyizhong *yizhong gydthkjy gy****** n

洛谷P1101 单词方阵——S.B.S.

题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母.输出时,将不是单词的字母用“*”代替,以突出显示单词.例如: 输入: 8 输出: qyizhong *yizhong gydthkjy gy****** nwidghji n*i***** orbzsfgz o**z**** hhgrhwth h***

洛谷 P1101 单词方阵

不算搜索的搜索 思路和很多人的一样,因为只要找到两个字母,方向就确定了,记录下方向,剩下的暴力即可. #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n; int fx[9][2]={{0,0},{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};//存方向,循环起来比较方便 char map[101

落谷P1101 单词方阵 //参考代码

1 #include<iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int N = 105; 6 char s[N][N], a[] = "yizhong"; 7 bool vis[N][N]; 8 int n; 9 int dx[8] = {0, 0, 1, -1, 1, 1, -1, -1}, 10 dy[8] = {1, -1,

落谷P1101 单词方阵 //未完成

1 #include<iostream>/*cout<<endl; 2 for(int i=1;i<=n;i++) 3 for(int j=0;j<n;j++){ 4 5 cout<<a[i][j]; 6 if(j==n-1)cout<<endl; 7 }*/ 8 #include<cstring> 9 #include<cstdio> 10 using namespace std; 11 const int wd=101

P1101 单词方阵【洛谷】

//题目----------------------------------------------------------------------------------------- 传送门: http://www.luogu.org/problem/show?pid=1101 P1101 单词方阵 题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=

Luogu P1101 单词方阵

明明是一道水题,我还找不出 bug 来...原本在 DFS 途中记录单词串,只好使用笨方法,在结尾加一个 for 记录单词串.终于过了. 思路:枚举图中每一个点进行 DFS,途中判断访问的点是否为连续元素("yizhong"字符串中连续),如果不是返回:进行下一层 DFS,如果返回值 True 则直接层层返回 True,强行退出. 1 /* P1101 单词方阵 2 * Au: GG 3 */ 4 #include <cstdio> 5 #include <cstdl

洛谷P1019单词接龙 搜索

洛谷P1019 单词接龙 这道题目 我用的是搜索 应为起点已经确认了,那就从这开始搜索,如果能接上去就接上去,回溯一下需要注意的就是一些细节问题,比方说不能被另一个单词完全覆盖等等 以及字符串是从零开始的问题 1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdlib> 5 #include <string> 6 #include <a

洛谷P2832 行路难 分析+题解代码【玄学最短路】

洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座山,只能单向通过,并会耗费小X一定时间. 小X现在在1号山,他的目的是n号山,因为那里有火车站. 然而小X的体力是有限的.他每通过一条羊肠小道,就会变得更疲劳,导致他通过任意一条羊肠小道的时间都增加1. 输入格式: 第一行两个数,n,m 第2行到第m+1行,每行3个数A,B,C,表示A.B之间有一条

洛谷 P1219 八皇后 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1219 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下: 行号 1 2 3 4 5 6 列号 2 4 6 1 3 5 这只是跳