链接:http://www.lightoj.com/volume_showproblem.php?problem=1046

题意:

给m*n的棋盘,数字k代表这个位置上有棋子,并且一步可以连续跳1-k下,求所有棋子跳到同一位置的最小步数。

思路

容易想到用bfs,计算所有棋子在一个格子的步数,找出步数最小的格子就可以了。

 #include<bits/stdc++.h>
using namespace std;
char mp[][];
int num[][], n, m;
bool vis[][][];
struct node
{
int x, y, step, jumpnum;
};
node s;
void bfs(int cnt, int tiao)
{
int nx[][] = {{,},{,-},{,},{,-},{-,},{-,-},{-,},{-,-}};
queue<node>Q;
Q.push(s);
while(!Q.empty())
{
s = Q.front();
Q.pop();
for(int k = ; k < ; k++)
{
node t = s; //这句一定要放在循环里!!之前放在外边一直WA..
t.x = s.x + nx[k][];
t.y = s.y + nx[k][];
if(t.x<||t.x>=m||t.y<||t.y>=n||vis[cnt][t.x][t.y]) continue;
if(t.jumpnum == )
{
t.jumpnum = tiao;
vis[cnt][t.x][t.y] = ;
if(tiao == ) //若k=1那么也要步数+1
t.step = s.step+;
Q.push(t);
}
else if(t.jumpnum == tiao)
{
t.step = s.step+;
t.jumpnum = s.jumpnum -;
vis[cnt][t.x][t.y] = ;
Q.push(t);
}
else //t.jumpnum减到1之前都不增加步数
{
t.jumpnum = s.jumpnum -;
vis[cnt][t.x][t.y] = ;
Q.push(t);
}
num[t.x][t.y] += t.step;
}
}
}
int main()
{
int t, cas = ;
cin>>t;
//freopen("1.txt", "w", stdout);
while(t--)
{
int cnt = ;
memset(num, , sizeof num);
memset(vis, , sizeof vis);
scanf("%d%d", &m, &n);
for(int i = ; i < m; i++)
scanf("%s", mp[i]);
for(int i = ; i < m; i++)
for(int j = ; j < n; j++)
{
if(mp[i][j] != '.')
{
vis[++cnt][i][j] = ;
s.x = i, s.y = j, s.jumpnum = mp[i][j]-'', s.step = ;
bfs(cnt, mp[i][j]-'');
}
}
int ans = 1e9, ii, jj, k;
for(int i = ; i < m; i++)
for(int j = ; j < n; j++)
{
for(k = ; k <= cnt; k++)
if(!vis[k][i][j]) break;
if(k==cnt+&&ans > num[i][j])
ans = num[i][j], ii = i, jj = j;
}
printf("Case %d: %d\n", ++cas, ans==1e9?-:ans);
}
}

【lightoj-1046】Rider(BFS)的更多相关文章

  1. 【BZOJ 1046】 1046: [HAOI2007]上升序列

    1046: [HAOI2007]上升序列 Description 对于一个给定的S={a1,a2,a3,-,an},若有P={ax1,ax2,ax3,-,axm},满足(x1 < x2 < ...

  2. 【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】

    (是时候为五一培训准备真正的技术了qwq) part1  队列(FIFO) 算法简介: FIFO:First In First Out(先进先出) 队列是限定在一端进行插入,另一端进行删除的特殊线性表 ...

  3. 【Codeforces 1037D】Valid BFS?

    [链接] 我是链接,点我呀:) [题意] 让你判断一个序列是否可能为一个bfs的序列 [题解] 先dfs出来每一层有多少个点,以及每个点是属于哪一层的. 每一层的bfs如果有先后顺序的话,下一层的节点 ...

  4. 【LightOJ - 1205】Palindromic Numbers

    [链接]https://cn.vjudge.net/problem/LightOJ-1205 [题意] 求出L..R范围内的回文个数 [题解] 数位DP; 先求出1..x里面的回文串个数.则做一下前缀 ...

  5. 【NOIP1999】【Codevs 1046】旅行家的预算

    http://codevs.cn/problem/1046/ Solution: 贪心,如果当前油价很低,它就比起当前剩余油的价还低就可以替换,并且每次加满,最后把剩的油卖掉即可 油价用单调链表(不知 ...

  6. 【OpenJ_Bailian - 2790】迷宫(bfs)

    -->迷宫  Descriptions: 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不 ...

  7. 【图论算法】Dijstra&BFS

    选择V-S中的点加入S时用了贪心思想,即求d[]中legth最小且未被标记(未加入加入S)的点. 一点都没优化的实现: import java.lang.reflect.Array; /** * Cr ...

  8. 【LightOJ 1422】Halloween Costumes(区间DP)

    题 题意 告诉我们每天要穿第几号衣服,规定可以套好多衣服,所以每天可以套上一件新的该号衣服,也可以脱掉一直到该号衣服在最外面.求最少需要几件衣服. 分析 DP,dp[i][j]表示第i天到第j天不脱第 ...

  9. 【floyd求最小环】【Vijos 1046】【观光旅游】

    标签:图结构 最短路 题目大意:给你一个无向图,至少经过3个节点的简单回路(不能包括其他环) 一开始的思路:用一个NUM[i][j]表示i到j的最短路经过几个节点,显然解法不太优美,而且还是错的 再想 ...

随机推荐

  1. 假设做一个精美的Login界面(攻克了一EditText自带clear的功能,相似iphone的UITextField)

    先上图:     XML为: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  2. docker中制作自己的JDK+tomcat镜像

    方式一 首先,准备好想要的jdk和tomcat,另外,我们需要创建一个Dockerfile文件.下面展示一个Dockerfile文件的完整内容: FROM ubuntu:14.10 MAINTAINE ...

  3. Library Cache优化与SQL游标

    Library Cache主要用于存放SQL游标,而SQL游标最大化共享是Library Cache优化的重要途径,可以使SQL运行开销最低.性能最优. 1 SQL语句与父游标及子游标 在PL/SQL ...

  4. Linux定时器 使用

    1.alarm alarm()执行后,进程将继续执行,在后期(alarm以后)的执行过程中将会在seconds秒后收到信号SIGALRM并执行其处理函数. #include <stdio.h&g ...

  5. selenium破解数字验证码

    搞了半天,总算弄出来了,识别率还可以,普通的数字验证码 from selenium import webdriver from PIL import Image import pytesseract ...

  6. shiro 拦截器

    参考

  7. Loadrunder场景设计篇——定时器(schedule)

    A.   定义方案schedule 在 Scenario Schedule面板中,选择一个方案schedule,或通过点击New Schedule定义一个新的方案 定义schedule: a.新建sc ...

  8. js keyCode(键盘键码)

    摘自:http://blog.csdn.net/dyllove98/article/details/8728657 * 网上收集的KeyCode值方便大家查找: keycode 8 = BackSpa ...

  9. grads 新老版本目录对比

    最近不少人都在使用OpenGrADS,最新的版本已经更新到了2.0.a9,具体grads做了哪些更新,在附件里面放了一个,是英文的. 很多人说在使用原来的一些教程的时候找不到相对应的文件夹了,其实仔细 ...

  10. Mysql字段属性应该尽量设置为not null

    除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL.这看起来好像有点争议,请往下看. 所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物 ...