2014 网选 5024 Wang Xifeng's Little Plot

简介:
题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话,
那么必须是 90度,或者没有转弯!

思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 !
step[i][j][k] 表示的是(i,j)沿着k方向一直走到头或者转弯时的最长步数!
最后枚举每一个可走点转弯为90度的路径,找到最长的长度!

step[i][j][k1] + step[i][j][k2] 就是 (i, j)这个点 k1 和 k2方向构成90度!


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define  N  105
using namespace std;

int step[N][N][8];
int dir[8][2] = { {0, 1}, {1, 0}, {-1, 0}, {0, -1}, {-1, -1}, {1, 1}, {-1, 1}, {1, -1} };
int index[8][2] = { {0, 1}, {1, 3}, {2, 3}, {0, 2}, {5, 6}, {5, 7}, {4, 7}, {4, 6}};//每一个节点所对应的转弯的枚举 
char mp[N][N], vis[N][N];
int n;

bool judge(int x, int y){
    if(x < 1 || y < 1 || x > n || y > n)
        return false;
    if( mp[x][y] == '#')  return false;
    
    return true;
}

void dfs(int x, int y){
    for(int i = 0; i < 8; ++i){
        int xx = x + dir[i][1];
        int yy = y + dir[i][0];
        if(!judge(xx, yy))
            step[x][y][i] = 1;
        else{
            if( !step[xx][yy][i] )//记忆话的赶脚 
                dfs(xx, yy);
            step[x][y][i] = 1 + step[xx][yy][i];
        }
    }
}

int main(){
    while(scanf("%d", &n) && n){
        memset(step, 0, sizeof(step));
        memset(vis, 0, sizeof(vis));
        for(int i = 1; i <= n; ++i)
            scanf("%s", mp[i]+1);
        
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= n; ++j)
                if(mp[i][j] == '.')
                           dfs(i, j);
                       
        int maxN = -1;                       
        for(int i=1; i <= n; ++i)
            for(int j = 1; j <= n; ++j){
                if(mp[i][j] == '.')
                    for(int k = 0; k < 8; ++k)
                        maxN = max(maxN, step[i][j][index[k][0]] + step[i][j][index[k][1]] );
            } 
        printf("%d\n", maxN - 1);//因为多加了一次拐点! 
    } 
    return 0;
}


目录
相关文章
|
1月前
|
算法 搜索推荐 数据挖掘
文献解读-​ ​Listeria monocytogenes personalized cancer vaccines drive therapeutic immune responses to cancer derived neoantigens
这项研究展示了ADXS-NEO新抗原癌症疫苗在克服癌症免疫治疗两大主要挑战方面的潜力。通过使用临床前小鼠肿瘤模型,研究证实ADXS-NEO能够产生强大的新抗原特异性T细胞反应,并将"冷"肿瘤微环境转变为"热"。作为一种基因工程改造的单核细胞李斯特菌疫苗,ADXS-NEO每个构建可靠定多达40个潜在新抗原,在MC38肿瘤模型中引发强大T细胞反应。系统给药后,它能驱动促炎性先天和适应性免疫,减弱肿瘤内的免疫抑制细胞(如调节性T细胞、髓系来源抑制细胞和M2型肿瘤相关巨噬细胞),同时产生效应αβ/γδ肿瘤浸润T细胞和M1型巨噬细胞。
28 0
|
6月前
GEE错误——Tile error: Arrays must have same lengths on all axes but the cat axis
GEE错误——Tile error: Arrays must have same lengths on all axes but the cat axis
61 1
|
机器学习/深度学习 算法 Python
MachineLearning---Naive Bayes
MachineLearning---Naive Bayes
77 0
|
存储 算法 数据安全/隐私保护
MachineLearning ----KNN
MachineLearning ----KNN
81 0
|
机器学习/深度学习 数据采集 运维
Random Forest
首届世界科学智能大赛:生命科学赛道——生物学年龄评价与老年病风险预测
122 0
|
机器学习/深度学习 数据可视化
Lesson 5.2 混淆矩阵与 F1-Score
Lesson 5.2 混淆矩阵与 F1-Score
|
搜索推荐 Python
【现学现用】matplotlib画图(plt与ax的关系add_subplot与subplots等)
【现学现用】matplotlib画图(plt与ax的关系add_subplot与subplots等)
214 0
【现学现用】matplotlib画图(plt与ax的关系add_subplot与subplots等)
1118. Birds in Forest (25)
#include #include #include #include #include using namespace std; int father[10001]; int to[10001]; int fi...
764 0