// test20.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<cstring>
#include<string.h>
#include<deque>
#include <forward_list> using namespace std; class Solution {
public:
char* flag;
bool hasPath(char* matrix, int rows, int cols, char* str)
{
flag = str;
if (matrix == NULL || str == NULL) return false;
char* current = matrix;
char* tempStr= matrix;
bool result = false;
while (tempStr <matrix +rows*cols)
{
/* cout << "*current:" << *current << " ";
cout << "*str:" << *str << endl;*/
if (*tempStr == *str)
{ visisted.clear();//不要忘了清楚visisted!!!!!!!!!!!!!!(问题1)
setVisisted(rows, cols);
char* current = tempStr;
cout << "*current:" << *current << " ";
cout << "*str:" << *str << endl;
result = getPath(matrix,rows,cols, str, current);
cout << endl << endl;; }
if (result == true) break;
++tempStr;
}
return result;
} bool getPath(char* matrix, int rows, int cols, char* str, char* current)
{
if (*str == '\0')return true;//注意:此句话放在不同的位置得出的结论是不同的,不能放在下面的位置!!!!!!!!!!!!!(问题3)
if (current < matrix || current >= matrix + rows*cols) return false;
if(visisted[current - matrix]==true)return false;
// visisted[current - matrix] = true;//当该数符合要求才设置为true!!!!!!!!!!!!!!设置在此处是错误的!!!!!!!!!!(问题2) //if (*str == '\0')return true;//注意,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout << "*str:" << *str << " ";
cout << "*current:" << *current << endl;
cout << "str的下标:" << str - flag<<" " ;
cout << "current的下标:" << current - matrix << endl; if (*str != *current) return false;
//if (*str == *current)//两者相等
visisted[current - matrix] = true;//当该数符合要求才设置为true!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return getPath(matrix, rows, cols, str + 1, current - 1) ||
getPath(matrix, rows, cols, str + 1, current + 1) ||
getPath(matrix, rows, cols, str + 1, current - cols) ||
getPath(matrix, rows, cols, str + 1, current + cols); }
vector<bool> visisted;//访问标志数组,如果已经被访问,则设置为true,以后不可被访问
void setVisisted(int rows,int cols)
{
int i = 0;
while (i<rows*cols)
{
visisted.push_back(false);
++i;
} }
};
int main()
{ Solution so;
//cout << 1 / 10 << endl;
//char* matrix = "abcesfcsadee";
//char* matrix = "ABCEHJIGSFCSLOPQADEEMNOEADIDEJFMVCEIFGGS";
//char* str = "SLHECCEIDEJFGGFIE"; char* matrix = "AAAAAAAAAAAA";
char* str = "AAAAAAAAAAAA";
char* str1 = "bcced";
char* str2 = "abcb";
char* str3 = "abc";
int rows = 3;
int cols = 4;
//cout<<"bcced匹配结果是:"<<so.hasPath(matrix, rows, cols, str1)<<endl;
//cout << "abcb匹配结果是:" << so.hasPath(matrix, rows, cols, str2) << endl;
//cout << "abc匹配结果是:" << so.hasPath(matrix, rows, cols, str3) << endl;
cout << "SLHECCEIDEJFGGFIE匹配结果是:" << so.hasPath(matrix, 3, 4, str) << endl; return 0;
}

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

  1. 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  2. 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

    // 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...

  3. (转)思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...

    转自:http://www.cnblogs.com/soroman/archive/2008/03/21/1115571.html 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用1. ...

  4. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  5. 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数

    题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...

  6. 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...

  7. Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..

    Atitit.获得向上向下左的右的邻居的方法 软键盘的设计.. Left right可以直接使用next prev.. Up down可以使用pix 判断...获得next element的posit ...

  8. 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

    一.题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.解题思路 1)简单暴力解法 ...

  9. 编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。

    题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在ACSII码范围内. 输出描述: 输出范围在( ...

  10. 请实现一个函数,把字符串中的每一个空格替换成“%20”,比如输入 “We are Happly。” 则输出“we%20are%20happy。”

    请实现一个函数,把字符串中的每一个空格替换成"%20",比如输入 "We are Happly."  则输出"we%20are%20happy. &q ...

随机推荐

  1. 洛谷 P1362 兔子数

    题目描述 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4.如果一个正整数满足 S(x*x) = S(x) *S(x),我们称之为 ...

  2. 背景.jpg

  3. jQuery1.4与json格式兼容问题

    原文发布时间为:2010-10-10 -- 来源于本人的百度文章 [由搬家工具导入] 原来使用jQuery1.3.2编写的代码,更换到1.4.2后,使用jQuery.ajax()加载的json文件,不 ...

  4. 当文字过长时裁剪(显示省略号或只裁剪 用CSS方法,不用程序)

    原文发布时间为:2009-09-16 -- 来源于本人的百度文章 [由搬家工具导入] CSS中ellipsis()应用【转】 CSS手册中text-overflow属性的定义:   语法: text- ...

  5. bjam.exe 各个参数(转)

    原文转自 http://m.blog.csdn.net/article/details?id=42265605 bjam.exe stage --toolset=msvc-12.0 --without ...

  6. git的使用学习(六)git的标签管理

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...

  7. VS恢复默认设置

    通过“导入和导出设置”实现VS恢复默认设置 1.快捷步骤 工具 → 导入和导出设置 → 重置所有设置 → 下一步 → 选择“是否保存当前设置”,下一步 → 选择“要重置的开发语言(如,Visual C ...

  8. Linux centos 时间不同步 date 和 hwclock 时间不一致

    Linux centos 时间不同步 date 和 hwclock 网站有两台服务器,date 查看差3分钟 在应用 APP倒计时 与 直播,时时性较强的功能应用中 请求服务器后返回的服务器时间与数据 ...

  9. openshift scc解析

    SCC使用UserID,FsGroupID以及supplemental group ID和SELinux label等策略,通过校验Pod定义的ID是否在有效范围内来限制pod的权限.如果校验失败,则 ...

  10. Codeforces 583 DIV2 Asphalting Roads 模拟

    原题链接:http://codeforces.com/problemset/problem/583/A 题意: 很迷很迷,表示没看懂..但是你看样例就秒懂了 题解: 照着样例模拟就好 代码: #inc ...