2 条题解

  • 0
    @ 2025-4-15 10:30:43

    🧠 题解(Solution) 给出一个roe*col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。

    🔍 解题思路 dfs,上下左右四个方向移动即可,用一个vis[26]的数组作为标记数组,因为你已经走过的字母,必然不能在访问了,所以不用再开一个二维的标记数组了。

    • 0
      @ 2025-4-8 12:44:11
      #include<cstdio>
      #include<algorithm>
      #include<cstring>
      #include<iostream>
      using namespace std;
      char Map[30][30];
      int vis[27];
      int m,n,cnt;
      int dr[]={-1,0,1,0};
      int dc[]={0,1,0,-1};
      void dfs(int r,int c,int depth)
      {
              vis[Map[r][c]-'A']=1;
              int flag=0;
              for(int i=0;i<=3;i++)
              {
                      int new_r=r+dr[i];
                      int new_c=c+dc[i];
                      if(new_r>n||new_r<1||new_c<1||new_c>m)  continue;
                      if(!vis[Map[new_r][new_c]-'A'])
                      {
                        flag=1;
                        dfs(new_r,new_c,depth+1);
                      }
              }
              vis[Map[r][c]-'A']=0;
              if(!flag){cnt=max(cnt,depth);}
      }
      int main()
      {
              while(scanf("%d%d",&n,&m)==2)
              {
                      cnt=0;
                      memset(vis,0,sizeof(vis));
                      getchar();
                      for(int i=1;i<=n;i++)
                        {
                              for(int j=1;j<=m;j++)
                              scanf("%c",&Map[i][j]);
                              getchar();
                      }
              dfs(1,1,1);
              printf("%d\n",cnt);
              }
      }
      • 1

      信息

      ID
      155
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      3
      已通过
      1
      上传者