1212:LETTERS

LETTERS

由于是找一条最优路径(最多可以经过几个字母),所以在深度遍历回来的时候要注意还原

否则最优路径会受到其他路径的干扰!

另外关于check这里写的过于冗余,可以通过构造数组来改善。

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 const int N=30;
 6 int r,c,ans,a[N][N],cap[N];
 7 void solve(int,int,int);
 8 bool check(int x,int y,int d){
 9     if(x>0&&x<=r&&y>0&&y<=c&&!cap[a[x][y]]){
10         solve(x,y,d+1);
11         return 1;
12     }else return 0;
13 }
14 void solve(int x,int y,int d){
15     cap[a[x][y]]=1;
16     bool f=1;
17     if(check(x-1,y,d))f=0;
18     if(check(x+1,y,d))f=0;
19     if(check(x,y-1,d))f=0;
20     if(check(x,y+1,d))f=0;
21     if(f)ans=max(ans,d);
22     cap[a[x][y]]=0;
23 }
24 int main(){
25     cin>>r>>c;
26     for(int i=1;i<=r;i++)
27         for(int j=1;j<=c;j++){
28             char c;
29             cin>>c;
30             a[i][j]=c-'A';
31         }
32     solve(1,1,1);
33     cout<<ans;
34     return 0;
35 }

 

posted @ 2021-08-05 11:35  Rekord  阅读(738)  评论(0编辑  收藏  举报