2 条题解
-
0
#include <bits/stdc++.h> using namespace std; int n, m, ans; char g[25][25]; int dx[] = {0, 0, 1, -1}; int dy[] = {1, -1, 0, 0}; bool check(char x, string s) { for (int i = 0; i < s.size(); i++) if (s[i] == x) return true; return false; } // 走到了 x,y,当前路径为 s void dfs(int x, int y, string s) { ans = max(ans, (int)s.size()); for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (1 <= nx && nx <= n && 1 <= ny && ny <= m && !check(g[nx][ny], s)) { dfs(nx, ny, s + g[nx][ny]); } } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> g[i][j]; ans = 0; string s = " "; s[0] = g[1][1]; dfs(1, 1, s); cout << ans << '\n'; return 0; }
-
0
#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
- 标签
- (无)
- 递交数
- 122
- 已通过
- 49
- 上传者