1 条题解

  • 0
    @ 2022-11-17 21:15:34
    #include<bits/stdc++.h>
    using namespace std;
    
    int dx[]={1,-1,0,0};
    int dy[]={0,0,1,-1};
    int r,c,ans;
    char g[25][25];
    //哪些字母被走过了
    bool flag[30]; 
    //当前走到了x,y
    //已经走过了flag这些字母
    //当前长度是step 
    void dfs(int x,int y,int step){
    	ans=max(ans,step);
    	for(int i=0;i<4;i++){
    		int nx=x+dx[i];
    		int ny=y+dy[i];
    		if(1<=nx&&nx<=r&&
    		   1<=ny&&ny<=c&&
    		   flag[g[nx][ny]-'A']==false)
    		{
    			flag[g[nx][ny]-'A']=true;
    			dfs(nx,ny,step+1);
    			flag[g[nx][ny]-'A']=false;			
    		}
    	}
    }
     int main()
    {
    	cin>>r>>c;
    	for(int i=1;i<=r;i++)
    		for(int j=1;j<=c;j++)
    			cin>>g[i][j];
    	ans=1;
    	flag[g[1][1]-'A']=true;
    	dfs(1,1,1);
    	cout<<ans<<"\n";
    	return 0;
    }
    
    
    
    • 1

    信息

    ID
    432
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    (无)
    递交数
    111
    已通过
    44
    上传者