矩阵中的路径
时间:2019-08-30
本文章向大家介绍矩阵中的路径,主要包括矩阵中的路径使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
回溯:
private int[][] next = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; private int cols; private int rows; public boolean hasPath(char[] matrix, int rows, int cols, char[] str){ if (rows == 0 || cols == 0){ return false; } this.rows = rows; this.cols = cols; boolean[][] marked = new boolean[rows][cols]; char[][] chars = buildMatrix(matrix); for (int i = 0; i < rows; i++){ for (int j = 0; j < cols; j++){ if (backing(chars, str, marked, 0, i, j)){ return true; } } } return false; } private boolean backing(char[][] chars, char[] str, boolean[][] marked, int pathLen, int r, int c){ if (pathLen == str.length){ return true; } if (r < 0 || r >= rows || c < 0 || c >= cols || chars[r][c] != str[pathLen] || marked[r][c]){ return false; } marked[r][c] = true; for (int[] n : next){ if (backing(chars, str, marked, pathLen + 1, r + n[0], c + n[1])){ return true; } } marked[r][c] = false; return false; } private char[][] buildMatrix(char[] chars){ char[][] matrix = new char[rows][cols]; for (int i = 0, idx = 0; i < rows; i++){ for (int j = 0; j < cols; j++){ matrix[i][j] = chars[idx++]; } } return matrix; }
原文地址:https://www.cnblogs.com/earthhouge/p/11437206.html
- (49) 剖析LinkedHashMap / 计算机程序的思维逻辑
- Python多进程并行编程实践-mpi4py的使用
- 华为面试题——一道关于指针方面的编程题(C/C++)
- Spring Cloud第二篇 创建一个Eureka Server
- 数据挖掘实战(一):Kaggle竞赛经典案例剖析
- 华为面试题——单向链表倒转(一次遍历)
- Flask一步步搭建web应用
- (44) 剖析TreeSet / 计算机程序的思维逻辑
- (46) 剖析PriorityQueue / 计算机程序的思维逻辑
- (48) 剖析ArrayDeque / 计算机程序的思维逻辑
- 那些年在win下填过的Django坑
- Python爬虫一步步抓取房产信息
- (47) 堆和PriorityQueue的应用 / 计算机程序的思维逻辑
- 一篇文章完全理解virtualenv
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android星级评分条的实现代码
- Android模仿美团顶部的滑动菜单实例代码
- android实现按钮获取焦点延迟加载
- Devtools 老师傅养成[1] - Chrome Devtools介绍
- Android4.4开发之电池低电量告警提示原理与实现方法分析
- 浅谈android性能优化之启动过程(冷启动和热启动)
- Android拖动条的实现代码
- Devtools 老师傅养成[3] - Console 面板
- Android开发中数据库升级且表添加新列的方法
- Android冷启动实现app秒开的实现代码
- Devtools 老师傅养成[4] - Sources 面板
- android中使用Html渲染的方式实现必填项前面的*号示例
- android视频播放简单实现示例(VideoView&MediaPlayer)
- Android中SharedPreference详解及简单实例
- Devtools 老师傅养成[5] - Network 面板