【DP】判断在矩阵A中是否存在一条路径与数组s相同

转载 2015年01月23日 13:44:18

题目:EPI


提示:利用递归,且为了避免做重复工作,应该保存每一个查找失败的查询工作——实际上就是动态规划的思想。

class comparestr
{
public:
	int i,j,k;
	comparestr(int ii,int jj,int kk):i(ii),j(jj),k(kk){}
	const bool operator==(const comparestr &a)const
	{
		return i==a.i && j==a.j && k==a.k;
	}
};

struct HashComparestr
{
	const bool operator()(const comparestr &a)const
	{
		return hash<int>()(a.i)+hash<int>()(a.j)+hash<int>()(a.k);
	}
};

bool match_core(const vector<vector<int>> &A,const vector<int> &s,unordered_set<comparestr,HashComparestr>  &cache,const int i,const int j,const int k)
{
	if(k==s.size())
		return true;
	if(i<0 || i>=A.size() || j<0 || j>=A[0].size())
		return false;
	comparestr tmp(i,j,k);
	if(cache.find(tmp)!=cache.end())
		return false;


	if(A[i][j]==s[k] && ( match_core(A,s,cache,i+1,j,k+1) || match_core(A,s,cache,i-1,j,k+1) || match_core(A,s,cache,i,j+1,k+1) || match_core(A,s,cache,i,j-1,k+1) ) )
	{
		cout<<i<<"  "<<j<<"  "<<k<<endl;
		return true;
	}
	cache.emplace(i,j,k);
	return false;
}

bool match(const vector<vector<int>> &A,const vector<int> &s)
{
	if(A.empty() || s.empty())
		throw new exception;
	unordered_set<comparestr,HashComparestr>  cache;
	for(int i=0;i<A.size();i++)
	{
		for(int j=0;j<A[i].size();j++)
		{
			if(A[i][j]==s[0] && match_core(A,s,cache,i,j,0))
				return true;
		}
	}
	return false;
}


矩阵中的路径。请设计一条函数,用来判断一个矩阵中是否存在一条包含某个字符串所有字符的路径。

/** * 矩阵中的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。 * eg:下面3 X 4的矩阵中包含一条字符串"bcced"的路径,但矩阵中不包含"abcd...
  • renyisheng
  • renyisheng
  • 2015年08月29日 21:01
  • 1173

判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。(回溯法)

题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩...
  • baidu_29894819
  • baidu_29894819
  • 2017年11月21日 21:14
  • 158

(MATLAB)某个值(矩阵元素)是否存在于矩阵中

由于最近在使用MATLAB中,有对某个数进行查找,进行抽时间将相关的知识进行总结,以便后面查看。 某个数是否存在于矩阵中 find函数 A=[5,3,4,2]; lib=find(A==2)...
  • u013006553
  • u013006553
  • 2018年01月16日 15:05
  • 91

java中怎么判断一个字符串是否存在数组中

/*这是一个静态函数,不用声明对象就可以用的,如你的类名为Test,在任何情况下都可以调用Test.isHave函数*/ public static boolean isHave(String[...
  • wepe12
  • wepe12
  • 2017年06月01日 11:52
  • 1267

判断一个数组中的元素是否重复?

String [] s=new String(){“1”,“2”,“3”,“4”,“1”};Set set=new HashSet();for (int i=0;i{ set.add(s[i]);}i...
  • mdot
  • mdot
  • 2004年11月07日 21:40
  • 1145

判断数组元素是否重复

 判断数组元素是否重复          要求:判断一个数组中是否存在相同的元素,如果存在相同的元素则输出“重复”,否则输出“不重复”。          该题中如果需要判断数组中元素是否重复,则需要...
  • zhw888888
  • zhw888888
  • 2009年03月29日 20:23
  • 13717

matlab 判断两个矩阵是否相等

数学意义的相等 all(A(:) == B(:)) isequal(A, B)但须注意的是:B = A,未必能保证 isequal(A, B)返回真,因为如果 A 中包含NaN,因为按照定义,NaN ...
  • lanchunhui
  • lanchunhui
  • 2016年02月22日 15:53
  • 5671

java 判断一个数组是否有重复值

import java.util.HashSet;public class test { /** * @param args */ public static voi...
  • wh01096045
  • wh01096045
  • 2015年10月27日 18:05
  • 3385

如何判定数组是否存在重复元素

题目:假设数组 array 有 n 个元素,元素取值范围是 1~n,如何判定数组是否存在重复元素? 方法一:对数组进行排序(可以用效率比较高的排序算法,如快速排序、堆排序等),然后比较相邻的元素是否...
  • cyuyanenen
  • cyuyanenen
  • 2016年06月27日 16:44
  • 2070

jquery判断元素是否存在在数组中

var myArray = new Array(); function checkRepeat(sel) { console.log("索引是:" + $.in...
  • qq_36279445
  • qq_36279445
  • 2017年06月22日 14:37
  • 594
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【DP】判断在矩阵A中是否存在一条路径与数组s相同
举报原因:
原因补充:

(最多只允许输入30个字)