nyoj 最少步数
2015-12-29 10:19
211 查看
算法:搜索(深度优先搜索)
描述
这有一个迷宫,有0~8行和0~8列:
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
0表示道路,1表示墙。
现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?
(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)
输入第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。输出输出最少走几步。样例输入2
3 1 5 7
3 1 6 7
样例输出12
11
代码:
描述
这有一个迷宫,有0~8行和0~8列:
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
0表示道路,1表示墙。
现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?
(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)
输入第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。输出输出最少走几步。样例输入2
3 1 5 7
3 1 6 7
样例输出12
11
代码:
#include <iostream> #include <string> #include <cstring> #include <iomanip> #define INF 1000000 using namespace std; int a[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,}; int b[8][8],c,d,l[4][2]={-1,0,0,-1,1,0,0,1}; void dfs(int i,int j) { if(i==c&&j==d) return; for(int k=0;k<4;k++) { int dx=i+l[k][0]; int dy=j+l[k][1]; if(dx>=0&&dx<8&&dy>=0&&dy<8&&a[dx][dy]==0) { a[dx][dy]=1; if(b[i][j]+1<b[dx][dy]) b[dx][dy]=b[i][j]+1; dfs(dx,dy); a[dx][dy]=0; } } } int main() { int t,i,j,k,n,m; cin>>t; while(t--) { cin>>n>>m>>c>>d; for(i=0;i<8;i++) for(j=0;j<8;j++) b[i][j]=INF; b [m]=0; dfs(n,m); cout<<b[c][d]<<endl; } }
相关文章推荐
- python3.5.1对应的pywin32的安装问题 import win32api出错
- memcached分析之网络模型
- mPDF 中文乱码
- Magento查询系统还有那些产品没有设置Group Price的代码
- 推荐一个.NET(C#)的HTTP辅助类组件–restsharp
- Qt串口的使用记录
- nyoj 最少步数
- 复制文件提示0x8007045D I/O设备错误提示,复制中断的解决办法
- Unity3D 2D游戏开发 官方教程。(十二)
- android环境的搭建eclipse+ADT+SDK过程及问题总结
- Tomcat
- 使用 git 部署代码到服务器
- 自定义View之设置字体和夜间白天模式的TextView
- 超级简单的批量提取文件夹内文件名的经典方法
- Net 访问 SharePoint Rest 报错问题
- easy ui diglog 点击关闭,触发事件
- hdu5601-N*M bulbs(黑白棋盘染色)
- c++下new与delete基础用法
- ResourceBundle和properties 读取配置文件区别
- Android动态渐变view的颜色