链接: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. Andrew Ng机器学习编程作业:Regularized Linear Regression and Bias/Variance

    作业文件: machine-learning-ex5 1. 正则化线性回归 在本次练习的前半部分,我们将会正则化的线性回归模型来利用水库中水位的变化预测流出大坝的水量,后半部分我们对调试的学习算法进行 ...

  2. Unity3d依赖于平台的编译

    Unity的这一功能被命名为"依赖于平台的编译". 这包括了一些预编译处理指令,让你能够专门的针对不同的平台分开编译和运行一段代码. 此外,你能够在编辑器下运行一些代码用于測试而不 ...

  3. 如何做好部门以及公司的文档管理、知识管理以及情报管理?——By Me

    之前针对部门的文档管理开发平台进行过一次需求调研分析,对于实现方案与我们的实际需求之前的满足情况系统梳理了一下,我觉得对于有类似需求的团队或者公司应该有可以借鉴的地方,发到这里供大家参考.如有不正之处 ...

  4. [动态规划]UVA437 - The Tower of Babylon

     The Tower of Babylon  Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many d ...

  5. Oracle 11g数据库详解

    常见异常: ORA-14025:不能为实体化视图或实体化视图日志指定PARTITION ORA-14026:PARTITION和CLUSTER子句互相排斥 ORA-14027:仅可以指定一个PARTI ...

  6. SignalTap II进阶学习

    1. 多级触发 有时候我们可能需要利用多个信号(最多10个)依次触发后,观察特定的值.这这时候我们可以增加触发条件来满足我们的需求. 多个触发信号如上图所示,只有依次发生SW[0]上升沿. SW[1] ...

  7. 微信小程序 使用腾讯地图SDK详解及实现步骤

    信小程序 使用腾讯地图SDK详解及实现步骤    微信小程序JavaScript SDK: 官方文档:http://lbs.qq.com/qqmap_wx_jssdk/index.html 步骤: 1 ...

  8. Jconsle

    1. jconsole 远程连接: JConsole很好用,可以解决很多疑难杂症.但远程连接需要设置一下Java opt才可以使用.以下是步骤: 1). 在java opt下添加如下内容: 如果是无须 ...

  9. Linux系统下强大的lsof命令使用宝典

    lsof命令简介: lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件 ...

  10. Spring_使用 JdbcTemplate和JdbcDaoSupport