题目描述
仔细寻找,会发现:在下面的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);}
}