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

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

/********************************************************************《剑指Offer——名企面试官精讲典型编程题》C++代码** htfeng* 2018.09.25** 面试题12: 矩阵中的路径* 题目: 设计一个函数,用来判断一个矩阵中是否存在一条包含某字符串所有* 字符的路径,路经可以从矩阵中的任意一个开始,每一步可以在矩阵中向左、* 右、上、下移动一格,如果一条路径经过了矩阵的某一格,那么该路径不能再* 次进入格子*******************************************************************/#include
using namespace std;bool hasPathCore(const char* matrix, int rows, int cols, int row, int col, const char* str, int& pathLength, bool* visited);bool hasPath(const char* matrix, int rows, int cols, const char* str) {
if (matrix == nullptr || rows < 1 || cols < 1 || str == nullptr) return false; bool *visited = new bool[rows*cols]; memset(visited, 0, rows*cols); int pathLength = 0; for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
if (hasPathCore(matrix, rows, cols, row, col, str, pathLength, visited)) {
return true; } } } delete[] visited; return false;}bool hasPathCore(const char* matrix, int rows, int cols, int row, int col, const char* str, int& pathLength, bool* visited) {
if (str[pathLength] == '\0') return true; bool hasPath = false; if (row >= 0 && row < rows && col >= 0 && col < cols && matrix[row * cols + col] == str[pathLength] && !visited[row * cols + col]) {
++pathLength; visited[row * cols + col] = true; hasPath = hasPathCore(matrix, rows, cols, row, col - 1, str, pathLength, visited) || hasPathCore(matrix, rows, cols, row - 1, col, str, pathLength, visited) || hasPathCore(matrix, rows, cols, row, col + 1, str, pathLength, visited) || hasPathCore(matrix, rows, cols, row + 1, col, str, pathLength, visited); if (!hasPath) {
--pathLength; visited[row * cols + col] = false; } } return hasPath;}//=========================================测试代码==========================================void Test(char* testName, const char* matrix, int rows, int cols, const char* str, bool excepted) {
if (testName != nullptr) cout << testName << ":" << endl; bool result = hasPath(matrix, rows, cols, str); = if (excepted == result) cout << "Passed!" << endl; else cout << "Failed!" << endl;}// 功能测试void test1() {
char test[] = "test1:"; const char matrix[] = "abtgcfcsjdeh"; const char str[] = "bfce"; bool excepted = 1; Test(test, matrix, 3, 4, str, excepted);}// 边界测试void test2() {
char test[] = "test2:"; const char matrix[] = "abtgcfcsjdeh"; const char str[] = "abfb"; bool excepted = 0; Test(test, matrix, 3, 4, str, excepted);}//特殊输入测试void test3() {
char test[] = "test3:"; bool excepted = 0; Test(test, nullptr, 0, 0, nullptr, excepted);}int main() {
test1(); test2(); test3(); system("pause"); return 0;}

转载于:https://www.cnblogs.com/htfeng/p/9931721.html

你可能感兴趣的文章
[python]-类的继承
查看>>
pkg-config 设置
查看>>
选择之后,不能再选择。分配之后,不能再分配
查看>>
修复Kaos的中文显示
查看>>
自学it18大数据笔记-第三阶段Spark-day03——会持续更新……
查看>>
HBase总结
查看>>
xcode 快捷键
查看>>
STM32 CubeMX 中如何查看系统时钟
查看>>
C# 操作excel
查看>>
IT不同子领域的必读书单
查看>>
6.22
查看>>
(Nginx+Apache)实现反向代理与负载均衡
查看>>
内省、JavaBean
查看>>
【笨嘴拙舌WINDOWS】实践检验之屏幕取色
查看>>
CRM(四川网脉系统)项目总结
查看>>
常用HTTP状态码和CURL 000问题
查看>>
[leetcode]Valid Sudoku
查看>>
lesson 8:小程序
查看>>
鼠标悬停显示透明文字内容
查看>>
Window_Open详解
查看>>