hdoj 5024 枚举+dfs
2015-08-07 11:32
190 查看
hdoj 5024
题意:找一条最长的最多有一个90度拐点的路径,输出长度。
思路:枚举所有点做拐点,dfs最长路径。
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int d[8][2] = {1, 0, -1, 0, 0, 1, 0, -1, 1, 1, -1, -1, 1, -1, -1, 1};
int turn[8][2] = {2, 3, 2, 3, 0, 1, 0, 1, 6, 7, 6, 7, 4, 5, 4, 5};
int mx[105][105][8], n;
char mp[105][105];
int dfs(int x, int y, int dir) {
if(mx[x][y][dir] != -1) return mx[x][y][dir];
int ex = x + d[dir][0], ey = y + d[dir][1];
if(ex < 0 || ey < 0 || ex >= n || ey >= n || mp[ex][ey] == '#')
return mx[x][y][dir] = 1;
return mx[x][y][dir] = 1 + dfs(x + d[dir][0], y + d[dir][1], dir);
}
int cal(int x, int y, int d1, int d2) {
return dfs(x, y, d1) + dfs(x, y, d2) - 1;
}
main() {
while(~scanf("%d", &n) && n) {
memset(mx, -1, sizeof mx);
int ans = 0;
for(int i = 0; i < n; i++) scanf("%s", mp[i]);
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++) {
if(mp[i][j] == '#') continue;
for(int k = 0; k < 8; k++){
ans = max(ans, max(cal(i, j, k, turn[k][0]), cal(i, j, k, turn[k][1])));
}
}
}
printf("%d\n", ans);
}
}
题意:找一条最长的最多有一个90度拐点的路径,输出长度。
思路:枚举所有点做拐点,dfs最长路径。
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int d[8][2] = {1, 0, -1, 0, 0, 1, 0, -1, 1, 1, -1, -1, 1, -1, -1, 1};
int turn[8][2] = {2, 3, 2, 3, 0, 1, 0, 1, 6, 7, 6, 7, 4, 5, 4, 5};
int mx[105][105][8], n;
char mp[105][105];
int dfs(int x, int y, int dir) {
if(mx[x][y][dir] != -1) return mx[x][y][dir];
int ex = x + d[dir][0], ey = y + d[dir][1];
if(ex < 0 || ey < 0 || ex >= n || ey >= n || mp[ex][ey] == '#')
return mx[x][y][dir] = 1;
return mx[x][y][dir] = 1 + dfs(x + d[dir][0], y + d[dir][1], dir);
}
int cal(int x, int y, int d1, int d2) {
return dfs(x, y, d1) + dfs(x, y, d2) - 1;
}
main() {
while(~scanf("%d", &n) && n) {
memset(mx, -1, sizeof mx);
int ans = 0;
for(int i = 0; i < n; i++) scanf("%s", mp[i]);
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++) {
if(mp[i][j] == '#') continue;
for(int k = 0; k < 8; k++){
ans = max(ans, max(cal(i, j, k, turn[k][0]), cal(i, j, k, turn[k][1])));
}
}
}
printf("%d\n", ans);
}
}
相关文章推荐
- 14年百度深度学习校招题目
- django常见小问题
- binbinyang---android监听输入法弹起控制ScrollView滚到最顶端或最低端
- 生成MySQL数据字典的PHP脚本
- HDU 5358 多校第6场 First One
- 使用mybatis自带工具,自动生成表对应domain、mapper.xml以及dao
- django 学习笔记( 一)
- SWT中的UI线程
- 汉诺塔
- 出差中
- fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h
- broker
- 【JavaScript】 knockout.js 日期格式化借助【momentjs】
- Ubuntu和centos安装vsftpd步骤教程-ftp
- css代码标准化规范
- [贪心] poj3040 Allowance
- <!DOCTYPE>
- 顺序表和链表存储的优缺点
- TCP/IP网络编程 学习笔记_7 --基于UDP的服务端/客服端
- TCP/IP网络编程 学习笔记_7 --基于UDP的服务端/客服端