C语言中用队列和搜索解决跳马问题(多组测试数据)noj1043//运行时错误的一种解决方案
来源:互联网 发布:php 防止ddos攻击 编辑:程序博客网 时间:2024/06/03 23:14
描述
在国际象棋中,马的走法与中车象棋类似,即俗话说的“马走日”,下图所示即国际象棋中马(K)在一步能到达的格子(其中黑色的格子是能到达的位置)。
现有一200*200大小的国际象棋棋盘,棋盘中仅有一个马,给定马的当前位置(S)和目标位置(T),求出马最少需要多少跳才能从当前位置到达目标位置。
输入
本题包含多个测例。输入数据的第一行有一个整数N(1<=N<=1000),表示测例的个数,接下来的每一行有四个以空格分隔的整数,分别表示马当前位置及目标位置的横、纵坐标C(x,y)和G(x,y)。坐标由1开始。
输出
对于每个测例,在单独的一行内输出一个整数,即马从当前位置跳到目标位置最少的跳数。
输入样例
2
1 1 2 1
1 5 5 1
输出样例
3
4
这道题的思路跟前几到搜索问题几乎一致,只需要给一下输入输出格式还有结点条件就可以了。
需要注意的是,因为有多组数据,所以在计算每一组新数据之前都要清空队列和数组,否则之前用到的数据会干扰下一组的搜索。
而且arr[10]={0}这种形式只能在初始化时使用,不能重复使用,否则会出现warning,会使程序出现运行时错误。想要实现同样效果可以用两个for循环使数组中每一个arr[i][j]都等于0。
#include<iostream>#include<stdio.h>#include<queue>using namespace std; int sx,sy,tx,ty;int used[201][201]={0},step[201][201];int cx[]={1,1,2,2,-1,-1,-2,-2},cy[]={2,-2,1,-1,2,-2,1,-1};int output[1001];struct addr{ queue<int> x; queue<int> y;}addr; void init();void empty();int dfs();int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d%d%d",&sx,&sy,&tx,&ty); empty(); init(); output[i]=dfs(); } for(int i=1;i<=n;i++) { printf("%d\n",output[i]); }}void empty(){ while(!addr.x.empty()) { addr.x.pop(); } while(!addr.y.empty()) { addr.y.pop(); } for(int i=1;i<=200;i++) { for(int j=1;j<=200;j++) { used[i][j]=0; step[i][j]=0; } }}void init(){ addr.x.push(sx); addr.y.push(sy); used[sx][sy]=1; step[sx][sy]=0; }int dfs(){ int ux,uy,vx,vy,i; while(1) { ux=addr.x.front(); uy=addr.y.front(); addr.x.pop(); addr.y.pop(); for(i=0;i<8;i++) { vx=ux+cx[i]; vy=uy+cy[i]; if(vx==tx&&vy==ty) { return (step[ux][uy]+1); } if(vx>=1&&vy>=1&&vx<=200&&vy<=200&&used[vx][vy]==0) { addr.x.push(vx); addr.y.push(vy); used[vx][vy]=1; step[vx][vy]=step[ux][uy]+1; } } }}
阅读全文
0 0
- C语言中用队列和搜索解决跳马问题(多组测试数据)noj1043//运行时错误的一种解决方案
- C语言中用队列和搜索解决"加1乘2平方问题"
- C语言用搜索和队列知识解决“电子老鼠创迷宫问题”(noj1042)
- C语言中用队列和广搜解决六数码问题。
- c++广搜法跳马问题(队列)
- 搜索中的跳马问题
- C语言 跳马 队列,广搜,结构体
- 【关于数组两种使用的思考】C语言中用map函数和广搜解决八数码问题(noj1571)
- QT加载muPDF静态库的问题和解决(导入C语言静态库,QT的运行时库设定)
- 回朔法和递归解决八皇后和跳马问题
- 解决Linux c语言运行时候“段错误 (核心已转储)”问题-采用gdb 解决
- 关于c语言中用复数的问题
- 中国象棋的跳马问题(BFS)
- python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
- 解决新建Support7Demos的sample时出现编译错误和运行报错出现的问题
- 解决新建Support7Demos的sample时出现编译错误和运行报错出现的问题
- C语言 测试数据的输入 fscanf()
- C++——跳马问题(广搜)
- HTML中让表单input等文本框为只读不可编辑的方法
- Java集合类: Set、List、Map、Queue使用场景梳理
- python wxpython详解和使用
- java实现二维码生成
- QT5.6 加载百度地图
- C语言中用队列和搜索解决跳马问题(多组测试数据)noj1043//运行时错误的一种解决方案
- 关于arguments的使用
- Struts2中<s:checkboxlist>的用法
- MapReduce实战之 WordCount
- 学习经历(直到拿到offer后,不更新)
- 奇葩公司规定之搞笑版(改编自真实规定)
- texlive2017安装
- 配置Log4j,使得MyBatis打印出SQL语句
- BZOJ1076:奖励关(状压期望dp)