北大百练+简单递归回溯+就是那个变量类型弄错了,才搞错的额

来源:互联网 发布:万思软件开发有限公司 编辑:程序博客网 时间:2024/05/16 00:27
点击打开链接
#include<stdio.h>#include<stdlib.h>#include<iostream>#include<string.h>#include<cstring>#include<string>#include<algorithm>#include<math.h>#include<queue>#include<set>#define LL long long#define inf 0x3f3f3f3f#define mod 1e9+7using namespace std;int Move[5][2]={{0,0},{-1,0},{1,0},{0,-1},{0,1}};char  Arr[25][25];int R,C,maxn=1;///set<char>vis;bool vis[28],visit[25][25];void DFS(int x,int y,int num){   int i,j;   maxn=max(maxn,num);   for(i=1;i<=4;i++){    int x1=x+Move[i][0],y1=y+Move[i][1];    if(x1>=0&&x1<R&&y1>=0&&y1<C&&!vis[Arr[x1][y1]-'A']&&!visit[x1][y1]){        vis[Arr[x1][y1]-'A']=1;visit[x1][y1]=1;num++;        ///printf("%d %d %d\n",x1,y1,num);        DFS(x1,y1,num);        vis[Arr[x1][y1]-'A']=0;visit[x1][y1]=0;num--;    }  }}int main(){    int i=0;    scanf("%d %d",&R,&C);    for(i=0;i<R;i++){        scanf("%s",Arr[i]);    }    ///printf("%c\n",Arr[0][0]);    ///vis.insert(Arr[0][0]);    vis[Arr[0][0]-'A']=visit[0][0]=1;    DFS(0,0,1);    printf("%d\n",maxn);    return 0;}
#include<stdio.h>#include<stdlib.h>#include<iostream>#include<string.h>#include<cstring>#include<string>#include<algorithm>#include<math.h>#include<queue>#include<set>#define LL long long#define inf 0x3f3f3f3f#define mod 1e9+7using namespace std;int Move[5][2]={{0,0},{-1,0},{1,0},{0,-1},{0,1}};char Arr[25][25];int R,C,maxn=1;set<char>vis;void DFS(int x,int y,int num){   int i,j;   maxn=max(maxn,num);   for(i=1;i<=4;i++){    int x1=x+Move[i][0],y1=y+Move[i][1];    if(x1>=0&&x1<R&&y1>=0&&y1<C&&vis.count(Arr[x1][y1])==0){        vis.insert(Arr[x1][y1]);num++;        ///printf("%d %d %d\n",x1,y1,num);        DFS(x1,y1,num);        vis.erase(Arr[x1][y1]);num--;    }  }}int main(){    int i=0,j=0;    scanf("%d %d",&R,&C);    for(i=0;i<R;i++){        scanf("%s",Arr[i]);    }    vis.insert(Arr[0][0]);    DFS(0,0,1);    printf("%d\n",maxn);    return 0;


                                             
0 0