标签:24 cnt 22 int dfs ICPC 自闭 book include
题目翻译
单人游戏是在矩形棋盘上进行的,棋盘分为R行和C列。黑板上的每个位置都有一个大写字母(A-Z)。
在开始之前,棋盘的左上角(第一行,第一列)有一个人物。在每一步中,玩家都可以将人物移动到相邻的位置之一(上、下、左或右)。唯一的限制是一个数字不能访问同一个字母标记的位置两次。
游戏的目标是尽可能多的移动。
编写一个程序,计算人物在一场游戏中可以访问的棋盘上的最大位置数。
输入
输入的第一行包含两个整数R和C,由一个空白字符分隔,1<=R,C<=20。以下R行各包含C个字符。每行代表棋盘上的一行。
输出
输出的第一行也是唯一一行应该包含图形可以访问的板中的最大位置数。
样例
输入
3 6 HFDFFB AJHGDH DGAGEH
输出
6
解题思路
按题目要求,暴力搜索。
代码示例
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int r,c;
int ans;
string S[22];
char s[22][22];
bool book[101001];
void dfs(int x,int y,int cnt){
ans=max(ans,cnt);
if(!book[s[x+1][y]]&&x+1<=r){
book[s[x+1][y]]=1;
dfs(x+1,y,cnt+1);
book[s[x+1][y]]=0;
}
if(!book[s[x][y+1]]&&y+1<=c){
book[s[x][y+1]]=1;
dfs(x,y+1,cnt+1);
book[s[x][y+1]]=0;
}
if(!book[s[x-1][y]]&&x-1>=1){
book[s[x-1][y]]=1;
dfs(x-1,y,cnt+1);
book[s[x-1][y]]=0;
}
if(!book[s[x][y-1]]&&y-1>=1){
book[s[x][y-1]]=1;
dfs(x,y-1,cnt+1);
book[s[x][y-1]]=0;
}
}
int main(){
cin>>r>>c;
for(int i=0;i<r;i++) cin>>S[i];
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
s[i][j]=S[i-1][j-1];
book[s[1][1]]=1;
dfs(1,1,1);
cout<<ans<<endl;
return 0;
}
标签:24,cnt,22,int,dfs,ICPC,自闭,book,include 来源: https://blog.csdn.net/haobowen/article/details/122737777
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。