SPOJ SERGRID - Grid BFS
SERGRID - Grid
You are on an nxm grid where each square on the grid has a digit on it. From a given square that has digit k on it, a Move consists of jumping exactly k squares in one of the four cardinal directions. A move cannot go beyond the edges of the grid; it does
not wrap. What is the minimum number of moves required to get from the top-left corner to the bottom-right corner?
Input
Each input will consist of a single test case. Note that your program may be run multiple times on different inputs. The first line of input contains two space-separated integers n and m (1≤n,m≤500), indicating the size of the grid. It is guaranteed that
at least one of n and m is greater than 1. The next n lines will each consist of m digits, with no spaces, indicating the nxm grid. Each digit is between 0 and 9, inclusive. The top-left corner of the grid will be the square corresponding to the first character
in the first line of the test case. The bottom-right corner of the grid will be the square corresponding to the last character in the last line of the test case.
Output
Output a single integer on a line by itself representing the minimum number of moves required to get from the top-left corner of the grid to the bottom-right. If it isn’t possible, output -1.
Example
Input:
5 4
2120
1203
3113
1120
1110
Output:
6
思路:恰好能够跳Map[i][j]步,dfs超时,改用bfs
代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm>
using namespace std;
const int INF=0X3F3F3F3F;
const int MAXN=550;
int Map[MAXN][MAXN];
bool vis[MAXN][MAXN];
int n,m;
struct node
{
int x,y,step;
node(){x=y=step=0;}
};
void init()
{
memset(Map,0,sizeof(Map));
memset(vis,false,sizeof(vis));
char s[m+2];
for(int i=0;i<n;i++)
{
scanf("%s",s);
for(int j=0;j<m;j++)Map[i][j]=s[j]-'0';
}
}
int bfs()
{
node now,next;
queue<node> q;
now.x=now.y=now.step=0;
vis[0][0]=true;
q.push(now);
while(!q.empty())
{
now=q.front();q.pop();
if(now.x==n-1&&now.y==m-1)return now.step;
int dir[4][2]={{0,Map[now.x][now.y]},{0,-Map[now.x][now.y]},{Map[now.x][now.y],0},{-Map[now.x][now.y],0}};
for(int i=0;i<4;i++)
{
int xx=now.x+dir[i][0],yy=now.y+dir[i][1];
if(xx<0||xx>=n||yy<0||yy>=m)continue;
if(vis[xx][yy])continue;
next.x=xx;next.y=yy;next.step=now.step+1;
vis[next.x][next.y]=true;
q.push(next);
}
}
return -1;
}
int main()
{
while(~scanf("%d %d\n",&n,&m))
{
init();
int result=bfs();
printf("%d\n",result);
}
return 0;
}
SPOJ SERGRID - Grid BFS的更多相关文章
- SPOJ SERGRID 【BFS】
思路: 在一个方向上走K步,基础BFS. 注意标记: 注意路径: PS:显著注释是记录路径. #include<bits/stdc++.h> using namespace std; co ...
- SPOJ - AMR11J ——(BFS)
The wizards and witches of Hogwarts School of Witchcraft found Prof. Binn's History of Magic lesson ...
- SPOJ LAS(BFS)题解
题目:VJ 思路: BFS+回溯,但是要剪枝,看了dalao的题解,超时+WA无数发,终于过了 #include<cstdio> #include<cstring> #incl ...
- SPOJ-Grid ,水广搜easy bfs
SERGRID - Grid 一个水广搜我竟然纠结了这么久,三天不练手生啊,况且我快三个月没练过搜索了... 题意:n*m的方格,每个格子有一个数,意味着在此方格上你可以上下左右移动s[x][y]个格 ...
- [LeetCode] Shortest Distance from All Buildings Solution
之前听朋友说LeetCode出了一道新题,但是一直在TLE,我就找时间做了一下.这题是一个比较典型的BFS的题目,自己匆忙写了一个答案,没有考虑优化的问题,应该是有更好的解法的. 原题如下: You ...
- ZOJ 3781 Paint the Grid Reloaded(BFS)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 Leo has a grid with N rows an ...
- Robots on a grid(DP+bfs())
链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=25585 Current Server Time: 2013-08-27 20:42:26 Ro ...
- Paint the Grid Reloaded(缩点,DFS+BFS)
Leo has a grid with N rows and M columns. All cells are painted with either black or white initially ...
- spoj IITWPC4F - Gopu and the Grid Problem 线段树
IITWPC4F - Gopu and the Grid Problem no tags Gopu is interested in the integer co-ordinates of the ...
随机推荐
- LeetCode 538. Convert BST to Greater Tree (把二叉搜索树转换成较大树)
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...
- javascript 之执行环境-08
概念 执行环境(Execution context,简称EC)或执行上下文对象(后面统一用执行上下文表示),它定义了变量或者函数有权访问的其他数据,决定了他们各自的行为.是不是有点不好理解,那我先简单 ...
- 1053: [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3480 Solved: 2036[Submit][St ...
- Android 开发笔记___DateUtil——Time
package com.example.alimjan.hello_world; /** * Created by alimjan on 6/30/2017. */ import java.text. ...
- python模块导入的方法与区别
import .. #导入整个模块 from .. import .. #导入模块中的类.函数或者变量 from .. import * #导入模块中的所有公开成员 from .. import ...
- webpack学习笔记啊(幕课)
基础配置总结 webpack hello.js hello.bundle.js打包命令参数 --config filename : 指定其他名称做配置文件 --watch / -w : 监听文件改动, ...
- c# 条形码(求指教)
因公司需要完成一条形码打印问题,所以在找到一些资料做了一个Demo 特请教! 不知道此条形码是否正确: 图: 源码: 代码 )); } g.Save(); ...
- python基础阶段 经典练习题 拾英札记(2)
因为编程的练习题是交互式的,在不断调试和不断渐进完善中,你会有一种成就感和快乐感,不断的修缮,不断的尝试. 其实,认知自己,和探索世界,也是这样的啊. 只要不放弃,要坚持. #7 根据列表lt,实现 ...
- [转载] Lucene 工作原理
转载自http://www.cnblogs.com/dewin/archive/2009/11/24/1609905.html Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引 ...
- Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView
Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView 8.0出来很久了,这个新特性已经用了很久了,但是一直没有亲自去试试.这几天新的需求来 ...