最小步数 结题报告
来源:互联网 发布:中兴编程挑战赛 编辑:程序博客网 时间:2024/05/20 17:25
题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=58
这题也是也是图论的范畴,这种小范围的搜索,感觉DPS和BPS的差异不是很大,在解决这道题目还是可行的。
下面我用的DPS搜索。
首先定义全局的变量和数据结构:
int MIN;int mize[9][9]={ 1,1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0,1, 1,0,0,1,1,0,0,0,1, 1,0,1,0,1,1,0,1,1, 1,0,0,0,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,0,0,0,1, 1,1,1,1,1,1,1,1,1};struct point{int x,y;};vector<point> listline;
接下来是一个比较两个点是否匹配的函数,用了内联的方式。
inline bool comp(point a,point b){if(a.x==b.x&& a.y==b.y) return true;return false;}
下面就是核心的DPS递归算法,listline 这个栈是用来存储已经被搜索过的地方。
函数名fun(now,targe,deep):
now 当前搜索的点,
targe 目标点。
deep 是深度,与开始点的距离。用来判断最小步数的。
递归函数的思路如下:
1、检查是否达到目标点,达到则记录最小深度。。
2、如果越界,返回。
3、如果==1,返回。
4、如果已经被搜索,返回。
5、now点入栈,进行四个方向上的递归调用,now点出栈。
函数体代码如下:
void fun(point now,point targe,int deep){if(comp(now,targe)){ if(deep <MIN) MIN=deep;} if(now.y<0 || now.y>=9) return ; if(targe.x<0 || targe.x>=9) return ; if(mize[now.y][now.x]==1) return; for(vector<point>::iterator i=listline.begin();i!=listline.end();i++) { if(comp(*i,now)) return; } listline.push_back(now); point temp; temp.x=now.x-1;temp.y=now.y; fun(temp,targe,deep+1); temp.x=now.x+1;temp.y=now.y; fun(temp,targe,deep+1); temp.x=now.x;temp.y=now.y-1;fun(temp,targe,deep+1); temp.x=now.x;temp.y=now.y+1;fun(temp,targe,deep+1); listline.pop_back(); }
接下来是main()函数了,很简单,就是输入、调用fun(source,targe,0)、输出。
int main(){int N;cin>>N;while(N--){MIN=1000; listline.clear(); point source,targe; cin>>source.y>>source.x>>targe.y>>targe.x; //listline.push_back(source); fun(source,targe,0); cout<<MIN<<endl;}return 0;}
这道题目AC了,不过离最优程序还是有点低。
包含文件如下:
#include <iostream>#include <string.h>
#include <vector>
using namespace std;
- 最小步数 结题报告
- 南阳 58题 最小步数
- 最小步数
- 最小步数
- nyoj最小步数
- 最小步数
- nyoj58最小步数
- 最小步数
- 58-最小步数
- 【NYOJ58】最小步数
- 迷宫最小步数
- nyvj-最小步数
- nyoj-最小步数
- 迷宫最小步数
- 最小步数
- 三、四柱汉诺塔最小步数
- nyoj 58 最小步数
- 最小步数nyoj--92
- UIWebView
- Android Studio 的小小配置
- Django如何进入开发模式
- C++函数参数传递:按值传递和按引用传递 转载
- Java中的ThreadLocal类
- 最小步数 结题报告
- OpenCV库基础知识
- 深入浅出Symfony2 - 结合MongoDB开发LBS应用
- js在frame中操作frameset的cols属性的改变
- hdu 2594 kmp水题 求s1的前缀和s2的后缀重复度的最大值
- .NET平台将最具性价比
- C#基础篇2(问答)
- 4款好用的Android设备HTML编辑器
- Nutch源代码研究 网页抓取 下载插件