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度!

复制代码
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define  N  105
 6 using namespace std;
 7 
 8 int step[N][N][8];
 9 int dir[8][2] = { {0, 1}, {1, 0}, {-1, 0}, {0, -1}, {-1, -1}, {1, 1}, {-1, 1}, {1, -1} };
10 int index[8][2] = { {0, 1}, {1, 3}, {2, 3}, {0, 2}, {5, 6}, {5, 7}, {4, 7}, {4, 6}};//每一个节点所对应的转弯的枚举 
11 char mp[N][N], vis[N][N];
12 int n;
13 
14 bool judge(int x, int y){
15     if(x < 1 || y < 1 || x > n || y > n)
16         return false;
17     if( mp[x][y] == '#')  return false;
18     
19     return true;
20 }
21 
22 void dfs(int x, int y){
23     for(int i = 0; i < 8; ++i){
24         int xx = x + dir[i][1];
25         int yy = y + dir[i][0];
26         if(!judge(xx, yy))
27             step[x][y][i] = 1;
28         else{
29             if( !step[xx][yy][i] )//记忆话的赶脚 
30                 dfs(xx, yy);
31             step[x][y][i] = 1 + step[xx][yy][i];
32         }
33     }
34 }
35 
36 int main(){
37     while(scanf("%d", &n) && n){
38         memset(step, 0, sizeof(step));
39         memset(vis, 0, sizeof(vis));
40         for(int i = 1; i <= n; ++i)
41             scanf("%s", mp[i]+1);
42         
43         for(int i = 1; i <= n; ++i)
44             for(int j = 1; j <= n; ++j)
45                 if(mp[i][j] == '.')
46                            dfs(i, j);
47                        
48         int maxN = -1;                       
49         for(int i=1; i <= n; ++i)
50             for(int j = 1; j <= n; ++j){
51                 if(mp[i][j] == '.')
52                     for(int k = 0; k < 8; ++k)
53                         maxN = max(maxN, step[i][j][index[k][0]] + step[i][j][index[k][1]] );
54             } 
55         printf("%d\n", maxN - 1);//因为多加了一次拐点! 
56     } 
57     return 0;
58 } 
复制代码

 










本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3993741.html,如需转载请自行联系原作者
目录
相关文章
uva 11991 - Easy Problem from Rujia Liu?
这个题目的意思是输入n个数,m组询问,每组询问包含两个整数k,v,意思是询问整数v第k次出现的位置。
44 0
|
7月前
|
编解码 人工智能 数据库
JRC Monthly Water History, v1.4数据集
JRC Monthly Water History, v1.4数据集
97 0
uva167 The Sultan's Successors
uva167 The Sultan's Successors
49 0
|
搜索推荐 Python
【现学现用】matplotlib画图(plt与ax的关系add_subplot与subplots等)
【现学现用】matplotlib画图(plt与ax的关系add_subplot与subplots等)
250 0
【现学现用】matplotlib画图(plt与ax的关系add_subplot与subplots等)
Google Earth Engine ——LANDSAT/LT04/C01/T1_32DAY_/8day/annual_BAI
Google Earth Engine ——LANDSAT/LT04/C01/T1_32DAY_/8day/annual_BAI
112 0
Google Earth Engine ——LANDSAT/LT04/C01/T1_32DAY_/8day/annual_BAI
Google Earth Engine ——MODIS Terra/Aqua Daily BAI烧伤面积指数(BAI)
Google Earth Engine ——MODIS Terra/Aqua Daily BAI烧伤面积指数(BAI)
135 0
Google Earth Engine ——MODIS Terra/Aqua Daily BAI烧伤面积指数(BAI)
Google Earth Engine ——Landsat 8 8-Day BAI Composite烧伤面积指数BAI
Google Earth Engine ——Landsat 8 8-Day BAI Composite烧伤面积指数BAI
128 0
Google Earth Engine ——Landsat 8 8-Day BAI Composite烧伤面积指数BAI

热门文章

最新文章