讨论 / dfs
2016zhangzhongyu 2017-09-15 19:32:09
点我顶贴 收藏 删除
#include<cstdio>

#include<cstring>

int n,m,max=0;

char a[101][101];

bool bz[27];

void dfs(int x,int y,int z)

{

if(z+n-x+1<=max) return;

if(x==n)

{

if(z>max) max=z;

return;

}

for(int i=-1;i<=1;i++)

{

int t1=x+1,t2=y+i;

if(t1>n||t2<1||t2>m) continue;

if(!bz[a[t1][t2]-'A'])

{

bz[a[t1][t2]-'A']=true;

dfs(t1,t2,z+1);

bz[a[t1][t2]-'A']=false;

}

else dfs(t1,t2,z);

}

}

int main()

{

scanf("%d %d",&n,&m);

for(int i=1;i<=n;i++)

{

char s[101];

scanf("%s",s+1);

for(int j=1;j<=m;j++)

a[i][j]=s[j];

}

memset(bz,false,sizeof(bz));

for(int i=1;i<=m;i++)

{

bz[a[1][i]-'A']=true;

dfs(1,i,1);

bz[a[1][i]-'A']=false;

}

printf("%d",max);

}

查看更多回复
提交回复