欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

POJ 1154 LETTERS G++

程序员文章站 2022-07-14 20:18:55
...

POJ 1154 LETTERS G++

单人游戏,R行S列的棋盘,一个棋子,每个位置标识有大写字母。棋子开始时在最左上角,移动时同一个字母只能访问一次,求最多能移动多少次。

#include <iostream>
using namespace std;
int n,m;
char da[21][21];
int hs[26];
int ax[4]={0,0,1,-1};
int ay[4]={1,-1,0,0};
int maxt=0;
void bsf(int x,int y,int d)
{
	d++;
	if(hs[da[x][y]-'A']==1)
	{
		d--;
		return;
	}else if(hs[da[x][y]-'A']==0)
	{
		hs[da[x][y]-'A']=1;
	}
	maxt=max(d,maxt);
	for(int i=0;i<4;i++)
	{
		int tx,ty;
		tx=x+ax[i];
		ty=y+ay[i];
		if((tx>=0)&&(tx<n)&&(ty>=0)&&(ty<m))
		{
			bsf(tx,ty,d);
		}
	}
	hs[da[x][y]-'A']=0;
	d--;
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>da[i][j];
		}
	} 
	/*
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cout<<da[i][j];
		}
		cout<<endl;
	}*/ 
	bsf(0,0,0);	
	cout<<maxt<<endl;
	return 0;
} 

 POJ 1154 LETTERS G++