算法:搜索(深度优先搜索)

描述

这有一个迷宫,有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[n][m]=0;
dfs(n,m);
cout<<b[c][d]<<endl;
}
}

nyoj 最少步数的更多相关文章

  1. NYOJ 58 最少步数

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  2. nyoj 1022 最少步数【优先队列+广搜】

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  3. ACM 最少步数

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  4. [ACM_搜索] ZOJ 1103 || POJ 2415 Hike on a Graph (带条件移动3盘子到同一位置的最少步数 广搜)

    Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...

  5. 最少步数(bfs)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  6. 最少步数(dfs + bfs +bfs优化)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  7. 最少步数(bfs)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  8. T1330 最少步数(#Ⅱ- 8)(广度优先搜索)

    [题目描述] 在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”.有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字.他的同桌平时喜欢下围棋, ...

  9. NYOJ-58最少步数,广搜思想!

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 ->   Link  <- 这个题深搜广搜都是可以的,迷宫已经给出了,就看怎么做了:一般起点终点确定用广搜 ...

随机推荐

  1. C++拾遗(一)关于main()函数

    C:省略返回值默认为int,()中空着不等于void C++:不能省略返回值,()中空着等效于(void) 常规独立程序必须包含一个main(),DLL可以不需要main().

  2. javascript一些常用函数

    1.indexof 方法可返回某个指定的字符串值在字符串中首次出现的位置. 注释:indexOf() 方法对大小写敏感! 如果要检索的字符串值没有出现,则该方法返回 -1.  例 : 在本例中,我们将 ...

  3. ubuntu系统下adb连接手机

    发现Ubuntu12.04不能连接小米开发,adb devices不能看到设备!  搞了一个上午才搞成功! 小米手机利用USB连接到Ubuntu 12.04系统.运行下面的命令: longskywan ...

  4. 基本套接字总结(@function)

    最近学习了下UNIX下的网络编程.为了以后查询方便,总结在这里. 首先套接字的地址定义: IPv4地址和IPv6地址定义见<netinet/in.h>头文件定义.为了能够顺利转换不同的套接 ...

  5. My advice to young people - Donald Knuth [video]

    http://www.youtube.com/watch?v=75Ju0eM5T2c I took a note of what knuth said in the video. 1. Don't d ...

  6. UART与USART的区别

    UART与USART都是单片机上的串口通信,他们之间的区别如下: 首先从名字上看: UART:universal asynchronous receiver and transmitter通用异步收/ ...

  7. OpenUrl 的跨平台实现

    OpenUrl 是 iOS 中 UIApplication 提供的一个函数,用于调用其它程序.实际上各个平台都有自己的实现,这里提供一个直接封装完的跨平台版本给大家.           Delphi ...

  8. centos下httpd 启动失败的解决办法

    [root@csit yang]# service httpd start Starting httpd:                                            [FA ...

  9. 【转】Java.Math API 反正切算角度(四个象限情况要调整)

    原文网址:http://hunter090730.iteye.com/blog/485770 Math.PI 记录的圆周率Math.E 记录e的常量Math中还有一些类似的常量,都是一些工程数学常用量 ...

  10. debug openStack

    ERROR neutron.agent.l3.agent [-] An interface driver must be specified No valid host was found. Ther ...