当前位置: 代码迷 >> 综合 >> 1384: [蓝桥杯2018初赛]字母阵列 Java
  详细解决方案

1384: [蓝桥杯2018初赛]字母阵列 Java

热度:93   发布时间:2023-12-01 17:12:09.0

题目描述

仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO"。
SLANQIAO
ZOEXCCGB
MOAYWKHI
BCCIPLJQ
SLANQIAO
RSFWFNYA
XIFZVWAL
COAIQNAL
我们约定: 序列可以水平,垂直,或者是斜向;
并且走向不限(实际上就是有一共8种方向)。
上图中一共有4个满足要求的串。
下面有一个更大的(100x100)的字母方阵。
你能算出其中隐藏了多少个“LANQIAO”吗?

输入格式

本题无输入。
100*100字母方针:in.txt

输出格式

输出一个整数表示答案

解题思路:

dfs遇见L的时候对周围八个方向进行选择,是否是LANQIAO;

其中对反向进行选择时,用数组方式

int[] dx={0,0,-1,1,-1,1,-1,1}; int[] dy={1,-1,0,0,1,1,-1,-1};

0是不变,1是加,-1是减,方便方向遍历;

import java.util.Scanner;public class Main {static int ans=0;static String target="LANQIAO";public static void dfs(char[][] str,int line,int row,int hand,int dir){//截至条件if(hand==7) {ans++;return;}int[] dx={0,0,-1,1,-1,1,-1,1}; int[] dy={1,-1,0,0,1,1,-1,-1};line=line+dy[dir];row=row+dx[dir];if(line>=100||line<0||row>=100||row<0) return;//界限if(str[line][row]==target.charAt(hand))dfs(str,line,row,hand+1,dir);}public static void main(String[] args) {Scanner in=new Scanner(System.in);char[][] str=new char[100][100];for (int i = 0; i <100 ; i++) {str[i]=in.next().toCharArray();}for (int i = 0; i < 100; i++) {for (int j = 0; j <100 ; j++) {for (int k = 0; k < 8; k++) {if (str[i][j] == 'L') {dfs(str, i, j,1,k);}}}}System.out.println(ans);}
}

  相关解决方案