/*
题目:
设计一个函数,判断一个矩阵中是否存在一条包含该字符串所有字符的路径。
路径可从字符串的任意一格开始,每一步可向上、下、左、右移动一格。
如果一条路径经过了矩阵中的某一格,那么该路径不能再次经过该格。
*/
/*
思路:
采用回溯法。
遍历数组,当选中其中一个格子时,若与当前字符串的指定位置匹配,
则检测它四周的格子是否匹配,若匹配,继续深入,不匹配,则回退一格。 */ #include <iostream>
#include<vector>
#include<string.h>
using namespace std; bool hasPathCore(const char* matrix,int rows,int cols,int row,int col,const char* str,int& lengthAt,bool* visited){
if(str[lengthAt] == '\0') return true;
if(row >=0 && col >=0 && row < rows && col < cols && !visited[cols*row+col] &&matrix[row*cols+ col] == str[lengthAt]){
visited[row*cols+ col] = true;
lengthAt++;
cout<<" "<<matrix[row*cols+col];
if(hasPathCore(matrix,rows,cols,row+1,col,str,lengthAt,visited) || hasPathCore(matrix,rows,cols,row-1,col,str,lengthAt,visited) ||
hasPathCore(matrix,rows,cols,row,col+1,str,lengthAt,visited) || hasPathCore(matrix,rows,cols,row,col-1,str,lengthAt,visited) ) {
return true;
}
--lengthAt;
visited[row*cols+col] = false;
} return false;
}
bool hasPath(char* matrix,int rows,int cols,char* str){
if(!matrix || rows <= 0 || cols <= 0 || !str){
return false;
}
bool* visited = new bool[rows*cols];
memset(visited,0,rows*cols);
int lengthAt = 0;
for(int row = 0; row < rows; row++){
for(int col = 0; col < cols; col++){
cout<<row<<" "<<col<<endl;
cout<<matrix[cols*row + col]<<" ";
if(hasPathCore(matrix,rows,cols,row,col,str,lengthAt,visited)){ return true;
}
cout<<endl;
}
}
return false;
} int main()
{
char matrix[] = "ABCEHJIG SFCSLOPQ ADEEMNOE ADIDEJFM VCEIFGGS";
//char* matrix = "abtgcfcsjdeh";
char str[] = "SGGFIECVAASABCEHJIGQEM";
cout<<hasPath(matrix,5,8,str);
return 0;
}

  

最新文章

  1. POJ2774 Long Long Message [后缀数组]
  2. 一个简单的webservice的demo(下)winform异步调用webservice
  3. webform 组合查询
  4. Coding编译连接过程中遇到的问题及解决方法(iOS)
  5. boost asio tcp server 拆分
  6. PyQt之布局&amp;无边框&amp;信号
  7. hibernate 中如何用注解映射定长字符类型char(2)
  8. sql server2008安装错误(无法处理异常)
  9. 通过输入卡号前10位数字判断是哪个银行的卡和类型(储蓄卡or信用卡)
  10. Objective-C:Foundation框架-常用类-NSMutableDictionary
  11. ProGuard
  12. c++模板编程-异质链表
  13. SGU 495. Kids and Prizes( 数学期望 )
  14. 使用纯css3实现图片轮播
  15. package.json 里 devDependencies和dependencies的区别
  16. JavaScript设计模式--门面模式
  17. Beta Scrum Day 7
  18. 【Linux】配置SSH Key到GitHub/GitLab
  19. UniRX简述
  20. java 调用存储过程

热门文章

  1. 题解 CF1294F 【Three Paths on a Tree】
  2. 如何高效地远程部署?自动化运维利器 Fabric 教程
  3. Leetcode题解 - 部分中等难度算法题解(56、957、825、781、1324、816)
  4. css浮动(float)详解
  5. pytorch --- word2vec 实现 --《Efficient Estimation of Word Representations in Vector Space》
  6. bat脚本 定时删除备份的文件
  7. java String hashCode遇到的坑
  8. backgroud图片充满元素的方法
  9. Chrome Vue Devtools插件安装和使用
  10. Python字符串字母大小写变换