首页 > 其他 > 详细

【dfs】LETTERS

时间:2019-04-15 20:11:15      阅读:245      评论:0      收藏:0      [点我收藏+]

1212:LETTERS

【题目描述】

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

【输入】

第一行,输入字母矩阵行数RR和列数SS,1R,S201≤R,S≤20。

接着输出RR行SS列字母矩阵。

 

【输出】

最多能走过的不同字母的个数。

【输入样例】

3 6
HFDFFB
AJHGDH
DGAGEH

【输出样例】

6

错误原因:

把控制4个方向的数组dx,dy里的值赋值时,把0,0写成了0.0(我也是晕了,查了一个小时的错误)

 

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<string>
#include<cstring>
using namespace std;
const int maxn=999999999;
const int minn=-999999999;
const int ll=520;
int dx[4]= {0,0,1,-1};
int dy[4]= {1,-1,0,0};
inline int read() {
    char c = getchar();
    int x = 0, f = 1;
    while(c < 0 || c > 9) {
        if(c == -) f = -1;
        c = getchar();
    }
    while(c >= 0 && c <= 9) x = x * 10 + c - 0, c = getchar();
    return x * f;
}
int r,s,ans;
char a[ll][ll];
int visit[ll][ll],js[9999];
int da=0;
void dfs(int x,int y,int step) {
    if(da<step) {
        da=step;
    }
    for(int i=0; i<4; ++i) {
        int mx=x+dx[i];
        int my=y+dy[i];
        if((mx<r)&&(my<s)&&(mx>=0)&&(my>=0)&&(visit[mx][my]==0)&&(js[a[mx][my]-A]==0)) {
            visit[mx][my]=1;
            js[a[mx][my]-A]=1;
            dfs(mx,my,step+1);
            visit[mx][my]=0;
            js[a[mx][my]-A]=0;
        }
    }
}
int main() {
    cin>>r>>s;
    for(int i=0; i<r; ++i) {
        for(int j=0; j<s; ++j) {
            cin>>a[i][j];
        }
    }
    visit[0][0]=1;
    js[a[0][0]-A]=1;
    dfs(0,0,1);
    cout<<da; 
    return 0;
}

 

 

每日美图:

 技术分享图片

 

 

 

【dfs】LETTERS

原文:https://www.cnblogs.com/pyyyyyy/p/10712693.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!