poj 1154 letters (dfs回溯)

时间:2023-03-09 16:51:48
poj  1154  letters (dfs回溯)

http://poj.org/problem?id=1154

#include<iostream>
using namespace std;
int bb[]={},s,r,sum=,s1=;
char aa[][];
int dir[][]={-,,,,,-,,};
void dfs(int a,int b)
{
int a1,b1; if(s1>sum)
sum=s1; //更新最大数值
for(int i=;i<;i++)
{ a1=a+dir[i][]; //用bb数组记录访问过的字母
b1=b+dir[i][];
if(a1>=&&a1<s&&b1>=&&b1<r&&!bb[aa[a1][b1]-'A'])
{
s1++;
bb[aa[a1][b1]-'A']=; //如果在这条单线上没有记录改字母被访问过,则总数++;
dfs(a1,b1); //第一个字母总要被访问,所以不用回溯; bb[aa[a1][b1]-'A']=; //回溯反标记
s1--; //临时记录恢复
} }
}
int main()
{
cin>>s>>r;
for(int i=;i<s;i++)
for(int j=;j<r;j++)
cin>>aa[i][j];
bb[aa[][]-'A']=;
dfs(,); cout<<sum<<endl; return ;
}

相关文章