// 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. 用来武装Firebug的十四款Firefox插件

    原文发布时间为:2010-04-24 -- 来源于本人的百度文章 [由搬家工具导入] 如果你是一名Web设计师,Firebug想必不会陌生,作为一款Firefox插件,它可能是网站前端开发最有用的工具 ...

  2. 从数据库的表导出到Excel表格中【让客户端下载的Excel】

    原文发布时间为:2008-10-11 -- 来源于本人的百度文章 [由搬家工具导入] 这个例子是从gridview中导出到Excel,可以举一反三,可以直接从数据库中取值放在DataSet中,然后再从 ...

  3. react dva 表单校验

    import React,{ Component } from 'react'; import { connect } from 'dva'; import { WhiteSpace,NavBar , ...

  4. Servlet乱码解决

    后端收前端 1.post乱码 可以通过 request.setCharacterEncoding("utf-8");  这样在后端可以接收中文 2.get乱码(手动解决) 可以通过 ...

  5. Document类

    一.类结构 org.jsoup.nodes Class Document java.lang.Object org.jsoup.nodes.Node org.jsoup.nodes.Element o ...

  6. eclipse的Clean和Build All无效

    [问题描述]在点击eclipse的Clean和Build All时,eclipse的Console中直接显示了一个个.so文件install成功,然后Build Finish,实际是根本没有编译,只是 ...

  7. synchronous interrupt and asynchronous interrupt

    Asynchronous interrupt 中斷请求信号来自CM3内核的外面,来自各种片上外设和外扩的外设,对CM3来说是"异步"的: e.g. usb otg device S ...

  8. MySQL冗余数据的三种方案

    一,为什么要冗余数据 互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量. 水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非pa ...

  9. Swift 基础部分(建议掌握OC字符串知识的翻阅)

    更新说明: Swift 目前已经发布到4.0版本了,以前写的这整个Swift学习系列的文章,有很多的不足之处,我会重新整理整个系列文章,也是相当于重新复习一遍Swift,后面系列文章的改动之处全都会做 ...

  10. SpringMVC_01:创建运行环境(Maven)

    Maven 环境下配置: 1.新建MavenProject,打包选线根据情况选择jar war和pom jar:打包为jar包,主要用于被其他项目引用 war:打包为war包,可直接运行于服务器 po ...