【Java每日一题,dfs】矩阵查找字符串

简介: 【Java每日一题,dfs】矩阵查找字符串

Introduction

有一个m*n正整数矩阵(0-9),输入一个字符串,字符串由0-9的数字组成,要求判断是否存在从矩阵中的一点出发,可以从顺序相邻的数字构成该字符串。相同的数字单元只能使用一次


Input

第一行输入两个数字分别是m,n, 1<=m,n<=10


第二行按行输出数字矩阵中的数字,用空格隔开


第三行输入字符串(末尾没有换行)


Output

若可以找到输出”true”,若不能找到输出一个”false”


Sample

input

5 5
3 8 2 4 5 7 5 1 3 0 6 5 8 2 4 8 6 5 2 8 2 5 9 6 4
4318568

output

true

Solution

import java.util.Scanner;
public class Main {
    static int[][] arr;
    static boolean flag=false;
    static String mate;
    static boolean[][] vis;
    static int n,m;
    static int[] X={1,0,-1,0},Y={0,1,0,-1};
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
         n=s.nextInt(); m=s.nextInt();
        arr=new int[n][m];
        vis=new boolean[n][m];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                arr[i][j]=s.nextInt();
            }
        }
         mate=s.next();
        int begin=mate.charAt(0)-'0';
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                dfs(0,i,j);
            }
        }
        System.out.println(flag);
    }
    static void dfs(int len,int x,int y){
        if(len==mate.length()){
            flag=true;
            return;
        }
        if(flag||x<0||x>=n||y<0||y>=m||vis[x][y]||arr[x][y]!=(mate.charAt(len)-'0'))return;
        for(int i=0;i<4;i++){
            vis[x][y]=true;
            dfs(len+1,x+X[i],y+Y[i]);
            vis[x][y]=false;
        }
    }
}

Experience

正常的dfs

相关文章
|
9天前
|
安全 Java 索引
Java字符串类详解
Java字符串类详解
17 1
|
1天前
|
Java
Java 截取字符串中指定的分隔符放入list中
Java 截取字符串中指定的分隔符放入list中
|
1天前
|
Java 编译器
15. 【Java教程】字符串
15. 【Java教程】字符串
12 4
|
1天前
|
NoSQL Java Redis
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
|
2天前
|
Java 安全 测试技术
滚雪球学Java(49):如何使用StringBuilder类在Java中高效地处理字符串?
【6月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
12 3
滚雪球学Java(49):如何使用StringBuilder类在Java中高效地处理字符串?
|
4天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
15 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
6天前
|
存储 Java 索引
Java的字符串基本操作
Java的字符串基本操作
|
7天前
|
Java 开发工具 git
Java判断字符串是否为空
Java判断字符串是否为空
12 0
|
9天前
|
Java
Java集合类ArrayList应用 | 如何在字符串s1中删除有在字符串s2出现的字符?
这是一个关于Java编程面试题的摘要,题目要求从字符串s1中删除s2中存在的字符。解题思路包括使用ArrayList或StringBuilder实现。ArrayList实现时,遍历s1,如果字符不在s2中,则添加到ArrayList;StringBuilder实现有两种方法,一是新建StringBuilder并追加s1,然后遍历删除s2中的字符,二是直接在原地修改s1的StringBuilder对象。代码示例中展示了这些方法。
27 3
|
12天前
|
缓存 安全 Java
java-- 字符串+拼接详解, 性能调优 (底层原理实现)
java-- 字符串+拼接详解, 性能调优 (底层原理实现)
21 0