LightOJ 1046 Rider
2015-11-26 00:14
387 查看
搜一搜即可
#include <bits/stdc++.h> using namespace std; const int INF = 1e9; struct P { int r, c; P(){} P(int _r, int _c){r = _r; c = _c;} }; int n, m; int num, step[105][12][12]; int rm[8] = {1, 1, 2, 2, -1, -1, -2, -2}; int cm[8] = {2, -2, 1, -1, 2, -2, 1, -1}; char maze[12][12]; void init(int k, P start, int t) { for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) step[k][i][j] = INF; queue<P> q; q.push(start); step[k][start.r][start.c] = 0; while(!q.empty()) { P p = q.front(); q.pop(); for(int i = 0; i < 8; i++) { int nr = p.r + rm[i], nc = p.c + cm[i]; if(maze[nr][nc] != '\0' && step[k][p.r][p.c] + 1 < step[k][nr][nc]) { step[k][nr][nc] = step[k][p.r][p.c] + 1; q.push(P(nr, nc)); } } } for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) if(step[k][i][j] != INF) step[k][i][j] = ceil(1.0 * step[k][i][j] / t); } int solve() { int Min = INF; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) { int sum = 0; for(int k = 0; k < num; k++) sum = min(INF, sum + step[k][i][j]); Min = min(Min, sum); } if(Min == INF) return -1; return Min; } int main() { int T; scanf("%d", &T); for(int ca = 1; ca <= T; ca++) { memset(maze, 0, sizeof(maze)); scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%s", maze[i] + 1); num = 0; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) if(maze[i][j] != '.') init(num++, P(i, j), maze[i][j] - '0'); printf("Case %d: %d\n", ca, solve()); } return 0; }
相关文章推荐
- org.jsoup.select.Selector
- JS开发者常用的10个Sublime Text插件
- const的使用
- .net 估计要死在你手里了
- Tomcat+Apache 负载均衡
- web后端 文件上传
- hdoj2073(无限的路
- 制作initrd(2):update-initramfs和mkinitramfs脚本分析
- js的 style.width 取不到元素的宽度值
- 操作系统核心原理-1.操作系统导论
- 将两个矩阵相乘,A为x行y列的矩阵,B为y行z列的矩阵,A*B
- Windows上简单的Apache守护进程
- qt中文乱码问题
- ubuntu下django和apache的部署
- Apache Spark大数据分析入门(一)
- cdoj 574 High-level ancients dfs序+线段树
- Sublime text 2/3 中 Package Control 的安装与使用方法
- 1.环境搭建与命令入门
- ruby开发之hash遍历each_with_index
- nagios安装部署