博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵中的路径
阅读量:5021 次
发布时间:2019-06-12

本文共 1870 字,大约阅读时间需要 6 分钟。

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

 

java:

1 public class Solution { 2     private static final int[][] next = {
{0,1} , {0,-1} , {1,0} , {-1,0}} ; 3 private int rows ; 4 private int cols ; 5 public boolean hasPath(char[] matrix, int rows, int cols, char[] str) 6 { 7 if (rows == 0 || cols == 0) 8 return false ; 9 this.rows = rows ;10 this.cols = cols ;11 boolean[][] mark = new boolean[rows][cols] ;12 char[][] arr = init(matrix) ;13 for(int i = 0 ; i < rows ; i++){14 for(int j = 0 ; j < cols ; j++){15 if (backtrcking(arr,str,mark,0,i,j))16 return true ;17 }18 }19 return false ;20 }21 22 private boolean backtrcking(char[][] arr , char[] str , boolean[][] mark , int curLen , int r , int c){23 if (curLen == str.length)24 return true ;25 if (r < 0 || r >= rows || c < 0 || c >= cols || mark[r][c] || arr[r][c] != str[curLen])26 return false ;27 mark[r][c] = true ;28 for(int[] n : next){29 if (backtrcking(arr,str,mark,curLen+1,r+n[0],c+n[1]))30 return true ;31 }32 mark[r][c] = false ;33 return false ;34 }35 36 private char[][] init(char[] matrix){37 char[][] arr = new char[rows][cols] ;38 int k = 0 ;39 for(int i = 0 ; i < rows ; i++){40 for(int j = 0 ; j < cols ; j++){41 arr[i][j] = matrix[k++] ;42 }43 }44 return arr ;45 }46 47 48 }

 

转载于:https://www.cnblogs.com/mengchunchen/p/10627457.html

你可能感兴趣的文章
微信开发时调用jssdk,在安卓设备中成功调用;在ios设备中返回错误消息:config fail,无其他具体错误消息,且接口权限显示获取ok,无法调用...
查看>>
【Github教程】史上最全github使用方法:github入门到精通
查看>>
抽象工厂模式(Abstract Factory)
查看>>
luogu1373 小a和uim之大逃离 (dp)
查看>>
Redis的Pub/Sub客户端实现
查看>>
SQL日常问题和技巧——持续更新
查看>>
springMVC入门(一)------springMVC基本概念与安装
查看>>
Sam做题记录
查看>>
[bzoj] 2453 维护数列 || 单点修改分块
查看>>
IIS版本变迁
查看>>
BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
查看>>
mybatis09--自连接一对多查询
查看>>
myeclipse10添加jQuery自动提示的方法
查看>>
【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。...
查看>>
视频监控 封装[PlayCtrl.dll]的API
查看>>
软件工程APP进度更新
查看>>
Python 使用正则替换 re.sub
查看>>
CTF中那些脑洞大开的编码和加密
查看>>
简化工作流程 10款必备的HTML5开发工具
查看>>
c++ 调用外部程序exe-ShellExecuteEx
查看>>