码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指offer》:[66]矩阵中的路径

时间:2016-06-30 12:52:27      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中间向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。

具体是例如下图:

技术分享

上图中"bcced"就存在这条路径;但是"abcb"这条路径就不存在。因为进入‘b’这个格子后就不能再次进入。
解决方案:主要是用回溯法。首先任意选一个入口地址,也就是任选一个格子,如果格子中的字符ch和字符串中的第一个字符相等,则字符串向前移动一位,而在格子里我们在允许的条件下(col<cols && row<rows边界条件)可以向上下左右四个方向进行探索,比较,如果相等则继续向前;如果不等,则回溯到上一个结点的位置。重复这个过程知道找到一条路径包含目标字符串,否则没有该路径。
具体实现代码如下:
#include <iostream>
using namespace std;
char arr[17]="abcesfcsadeekong";
char strr[6]="bcced";
bool HasPathHelp(char array[],int col,int row,int cols,int rows, char *str,int &pathlength,bool *visited )
{
	if(str[pathlength]=='\0')
		return true;
	bool haspath=false;
	if(row>=0 && row<rows && col >=0 && col <cols
		&& array[row*cols+col]==str[pathlength]
		&& !visited[row*cols+col])
		{
			++pathlength;
			visited[row*cols+col]=true;
			haspath=HasPathHelp(array,col-1,row,cols,rows,str,pathlength,visited)  //left
				||  HasPathHelp(array,col,row-1,cols,rows,str,pathlength,visited)       //up
				||  HasPathHelp(array,col+1,row,cols,rows,str,pathlength,visited)      //right
				||  HasPathHelp(array,col,row+1,cols,rows,str,pathlength,visited);     //down
			if(!haspath)
			{
				--pathlength;
				visited[row*cols+col]=false;
			}
		}
		return haspath;
}


bool HasPath(char array[],int rows, int cols,char *str)
{
	if(array==NULL || rows<1 || cols<1 || str==NULL)
		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(HasPathHelp(array,col,row,cols,rows,str,pathlength,visited))
				return true;
		}
	}
	delete []visited;
	return false;
}

int main()
{
	bool result=HasPath(arr,4,4,strr);
	if(result)
		cout<<"该矩阵"<<arr<<"包含"<<strr<<"字符串"<<endl;
	else
		cout<<"该矩阵"<<arr<<"不包含"<<strr<<"字符串"<<endl;
	system("pause");
	return 0;
}

运行结果:

技术分享

《剑指offer》:[66]矩阵中的路径

标签:

原文地址:http://blog.csdn.net/gogokongyin/article/details/51788250

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!