TZOJ 3709:Number Maze(广搜记录前驱)
描述
You are playing one game called "Number Maze". The map of an example is shown in the following figure.
In the map, there are N*N+2 cells. When the game starts, you stay the top-left cell and you target is to reach the bottom-right cell with fewest number of moves. At the first step, you must move to the right of the start cell. After that, you can move to any cell (left, right, up or down, but can not move diagonally) if the target cell can be divided by the sum of the previous two numbers. However, you should never move backwards. For example, at first, you stay at the "2" cell, and you must move to the "6" cell, then have two selections "8" or "4" because (2+6)/8=1 and (2+6)/4=2, you can not move back to the "2" cell at this step although (2+6)/2=4. One possilbe solution is 2->6->8->7->5->3->4->7->11->2->13, and the total number of moves is 10.
Another solution is also legal but has longer moves:2->6->8->7->5->3->4->7->5->3->4->7->11->2->13
输入
Thare are at most 20 cases. The first line of each case has three
integers N<=10, S and T, which N indicates the dimension of the map, S
and T indicate the number in the start and target cell. Then follows N
lines and each line has N positive integers which indicate each number
in the N*N cells.
There has one blank line after each case and you can assume that the total number of all cells is no larger than 1000000.
The inputs are ended with End of File. If you have some questions, please visit the help page.
输出
Each case outputs the fewest number of moves or "Impossible" if you can not reach the target cell per line.
样例输入
3 2 13
6 4 3
8 7 5
2 11 2
样例输出
10
题意
由图可得,从图中S点出发到E点,第一步一定走到右边一格,第二步满足前两步和可以被当前值整除,不可以往回走
题解
首先我们得考虑怎么记录前驱,可以在结构体里新加pre,prex,prey,每次走的时候更新
然后我们还得考虑死循环的问题
例如
2 2 2
2 2
2 2
我们可以把每个点设一个设定值,如果一个点走的次数超过设定值,标记为不可走
写完一交,wa了??原因不明,后来发现没有考虑往回走的问题(t.prex!=h.x||t.prey!=h.y)
代码
- #include<stdio.h>
- #include<string.h>
- #include<queue>
- using namespace std;
- const int N=;
- int n,G[N][N],in[N][N],vis[N][N];
- int dx[]={,,,-};
- int dy[]={,-,,};
- struct p
- {
- int x,y,step,pre,prex,prey;
- }t,h;
- int bfs(int s)
- {
- memset(in,,sizeof(in));
- memset(vis,,sizeof(vis));
- queue<p>q;
- t.x=,t.y=,t.step=,t.pre=s,t.prex=,t.prey=;
- q.push(t);
- while(!q.empty())
- {
- t=q.front();q.pop();
- if(++in[t.x][t.y]>=)vis[t.x][t.y]=;//一个点入队次数>设定值就标记为不可走
- if(t.x==n&&t.y==n+)return t.step;
- for(int i=;i<;i++)
- {
- h.x=t.x+dx[i],h.y=t.y+dy[i];
- h.step=t.step+;
- h.pre=G[t.x][t.y];//前驱
- h.prex=t.x,h.prey=t.y;//前驱的x和y
- int sum=h.pre+G[t.prex][t.prey];
- if(!vis[h.x][h.y]&&h.x>=&&h.x<=n&&h.y>=&&h.y<=n+&&(t.prex!=h.x||t.prey!=h.y)&&G[h.x][h.y]&&sum%G[h.x][h.y]==)
- q.push(h);
- }
- }
- return -;
- }
- int main()
- {
- int s,e;
- while(scanf("%d%d%d",&n,&s,&e)!=EOF)
- {
- memset(G,,sizeof(G));
- G[][]=s;
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=n;j++)
- scanf("%d",&G[i][j]);
- G[i][n+]=;
- }
- G[n][n+]=e;
- int k=bfs(s);
- if(k==-)printf("Impossible\n");
- else printf("%d\n",k);
- }
- return ;
- }
TZOJ 3709:Number Maze(广搜记录前驱)的更多相关文章
- 台州OJ 3709: Number Maze (数组越界不报RE,报WA坑爹)
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3709 You are playing on ...
- TZOJ 5279 马拉松比赛(广搜)
描述 有一块矩形的海域,其中有陆地也有海洋,这块海域是CSUFT_ACM集训队的训练基地,这一天,昌神说要集训队的队员不能总是训练,于是昌神提出了中南林ACM集训队第一场环陆马拉松比赛,顾名思义就是围 ...
- TZOJ 3533 黑白图像(广搜)
描述 输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图所示的图形有3个八连块. 输入 第1行输入一个正 ...
- POJ 3026 Borg Maze 广搜(BFS)+最小生成树
题意:从S出发,去抓每一个A,求总路径最短长度.在S点和A点人可以分身成2人,不过一次只能让一个人走. 思路是先利用BFS求出各点之间的距离,建成图,再套用最小生成树模板. 一次性A了.不过觉得在判断 ...
- poj 3026 Borg Maze 最小生成树 + 广搜
点击打开链接 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7097 Accepted: 2389 ...
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- UVA 10047 The Monocycle (状态记录广搜)
Problem A: The Monocycle A monocycle is a cycle that runs on one wheel and the one we will be consi ...
- POJ 3984 迷宫问题 记录路径的广搜
主要是学一下如何在广搜中记录路径:每找到一个点我就记录下这个点是由那个点得来的,这样我找到最后个点后,我就可以通过回溯得到我走过的路径,具体看代码吧~ #include<cstdio> # ...
- TZOJ 2755 国际象棋(广搜+哈希)
描述 在n*n的国际象棋棋盘中,给定一“马(Knight)”和一“后(Queen)”的位置,问“马”能否在m步之内(包括m步)到达“后”的位置?马的走法是:每步棋先横走或直走一格,然后再斜走一格,即走 ...
随机推荐
- 关于webstorm链接不上SVN的解决办法
使用WEBSTROM上传代码是很方便的,但是通过它调用SVN时,经常会出现问题,我在使用它调用TortoiseSVN时就出现了一些问题,好在问题已经解决,现在把解决办法分享给大家: 首先,看看,安装时 ...
- maven插件之checkstyle
checkstyle的eclipse插件已经在eclipse中有讲过,用于开发者自查用.但是不能保证开发者能按照checkstyle进行改正或者自查,因此就需要对未checkstyle通过的代码不能编 ...
- 获取本机内网、外网ip(C++)<转>
基础知识 电脑在局域网内,通过网关/路由器连接到Internet则ip分为内网ip.外网ip.通过ipconfig得到的为局域网ip. 电脑直接拨号连接等,则本机通过ipconfig得到的就是外网ip ...
- LeetCode 题解 Search a 2D Matrix II。巧妙!
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30 ...
- ASP.NET HTTP 协议
http是无状态的,不会记得“上个请求***”,所以哪怕是同一个页面中的js.css.jpg也都要重复的提交Accept-Language.Accept-Encoding.Cookie等. 一般情况下 ...
- 数据库连接池技术,c3p0
百度 谷歌 http://commons.apache.org/ 可以找到DBCP , 这里选择使用C3P0,百度一下.https://www.mchange.com/projects/c ...
- hibernate criteria Restrictions工具类用法
CriteriaQuery cq = new CriteriaQuery(TSUser.class, dataGrid); // 查询条件组装器 org.jeecgframework.core.ext ...
- C#关键字as出现的错误
ObjectCache cache = MemoryCache.Default; string cacheData1 = cache["key1"] as string;//得不到 ...
- 吴裕雄 python神经网络(7)
import numpy as npnp.random.randint(0,49,3) # -*- coding:utf-8 -*-import kerasfrom keras.models impo ...
- 关于scp在zsh报错:zsh:no matches found :
我要将某一目录下面所有文件拷贝的时候,scp *.jpg 的时候,报错 zsh: no matchs found:path 其实是zsh自己解析了*号,所以,只要给*加上就可以了\ scp \*.jp ...