搜索-LETTERS
LETTERS
http://noi.openjudge.cn/ch0205/156/
给出一个roe*col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母
输入:
第一行,输入字母矩阵行数R和列数S,1<=R,S<=20
接着输入R行S列字母矩阵
输出:
最多能走过的不同字母的个数
#include<bits/stdc++.h> using namespace std; int fx[4]={0,1,0,-1}; int fy[4]={-1,0,1,0}; //ans 记录最多步数 n 行 m列 int ans,n,m; char a[200][200];//录入对应字符 bool p[50000];//一次走所有字符 不同的字符设置true //x,y 走到当前坐标 z 已经走过的步数 int dfs(int x,int y,int z){ ans=max(ans,z);//每个字符走一次 记录走过的步数 for(int i=0;i<4;i++){ int xx=x+fx[i]; int yy=y+fy[i]; //在二维矩阵范围内找 没有找过的继续找 if(xx>0 && xx<=n && yy>0 && yy<=m && !p[a[xx][yy]]){ p[a[xx][yy]]=true; dfs(xx,yy,z+1); p[a[xx][yy]]=false; } } } int main(){ // memset(p,false,sizeof(p)); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } p[a[1][1]]=true; dfs(1,1,1); cout<<ans<<endl; return 0; }
作者:newcode 更多资源请关注纽扣编程微信公众号
从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习