链接: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. SQL竖表转换成横表统计

    #创建表user_score create table user_score ( name varchar(20), subjects varchar(20), score int ); insert ...

  2. (4.17)sql server中的uuid获取与使用

    sql server中的uuid  建表: 1.自增长 studentno int primary key identity(1,1)——bigint也是可以的 2.创建uuidcustomerid  ...

  3. Tomcat 安装、配置与部署

    Tomcat的官方网站:http://tomcat.apache.org/,目前最新版本为7.0. Tomcat下载地址: 1.32位:http://mirrors.tuna.tsinghua.edu ...

  4. 编程语言的介绍(Day2)

    1.什么是编程,为什么要编程? 编程==编写程序(写代码) 2.编程语言有哪些 机器语言 优点是最底层,速度最快,缺点是最复杂,开发效率最低 汇编语言 优点是比较底层,速度最快,缺点是复杂,开发效率最 ...

  5. [笔记]WiX制作msi安装包的例子

    WiX是制作msi安装文件的工具,看了半天文档,感觉没有什么比一个例子更简单粗暴的了. <?xml version="1.0" encoding="UTF-8&qu ...

  6. LeetCode:每日温度【739】

    LeetCode:每日温度[739] 题目描述 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数.如果之后都不会升高,请输入 0 来代替. 例如,给定一个列 ...

  7. gc摘要

    1. Sun JDK 1.6 GC(Garbage Collector) http://bluedavy.com2010-05-13 V0.2 2010-05-19 V0.52010-06-01 V0 ...

  8. SVN使用—常用命令及避免冲突的方法

    一.SVN启动 [root@localhost ~]# mkdir /data/svn [root@localhost ~]# svnadmin create /data/svn/test [root ...

  9. Saltstack sls文件:批量替换指定文件

    一.创建salt管理配置文件:将所有minion 指定文件替换为master端的文件. 1.创建salt管理目录,并创建salt配置文件规范 # 创建salt文件目录 mkdir /srv/{salt ...

  10. 用maven创建web工程

    1.打开eclipse,选择File->New->Other菜单,弹出下面的对话框,在Wizards中输入maven,会过滤出和maven相关的菜单,选中Maven Project菜单,然 ...