LETTERS

GitHub跳转原题关系图返回列表

题意与原解析均从本地 OpenJudge 缓存迁移。

OJ: noi_openjudge

题目 ID: ch0205-156

难度:未知

标签:

日期: 2026-07-30 23:01

题意

完整题面见同目录的 problem.md

思路

代码

cpp
#include <bits/stdc++.h>
using namespace std;


int r,c;
int fx[][2] = { 1,0, -1,0, 0,1, 0,-1, };
bool vis[30][30];
bool mark[400];
char _map[30][30];
int ans = 0;
void init(){
    scanf("%d%d",&r,&c);
    int i,j;
    for (i=1;i<=r;i++){
        scanf("%s",_map[i]+1);
    }
}

bool in_map(int x,int y){
    if( x >=1 && x <=r  && y >= 1 && y <=c )
        return 1;
    return 0;
}


void dfs(int x,int y,int dep){
    ans = max(ans,dep+1);
    vis[x][y] = 1;
    mark[ _map[x][y] ] = 1;

    int i;
    for (i=0;i<4;i++){
        int nx = x + fx[i][0];
        int ny = y + fx[i][1];
        if(in_map(nx, ny) && !vis[nx][ny] && !mark[_map[nx][ny]]){
            dfs(nx,ny,dep+1);
            vis[nx][ny]  = 0;
            mark[ _map[nx][ny] ] = 0;
        }
    }
}


int main(){
    init();
    dfs(1,1,1);
    printf("%d\n",ans-1);
    return 0;
}

复杂度

总结