最少步数

时间限制: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
 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<stdio.h>
#include<string.h>
#include<queue> using namespace std; #define N 9 int maze[N][N]={,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,};
int mazeH[N][N]; struct Node
{
int x,y,cnt; };
int dir[][]={{,},{,-},{,},{-,}};//定义方向 bool Judge(int x,int y)
{
return (x < N && x >= && y < N && y >= && !mazeH[x][y])?true:false;//如果没有超出边界,返回true,否者false } void MakeNode(int x,int y,int cnt,Node &node)
{
node.x=x;
node.y=y;
node.cnt=cnt;
mazeH[x][y]=;
} int bfs(int sX,int sY,int eX,int eY)
{
Node node,tempNode;
MakeNode(sX,sY,,node);
queue<Node> Q;
Q.push (node);
while( !Q.empty() )
{
node=Q.front();
Q.pop ();
if( node.x==eX && node.y==eY )//判断是否找到结束的那个点,如果找到了,将返回最小步数;
{
return node.cnt;
}
for(int i=;i<;++i)
{
if( Judge(node.x+dir[i][],node.y+dir[i][]) )
{
MakeNode(node.x+dir[i][],node.y+dir[i][],node.cnt+,tempNode);
Q.push (tempNode);
}
}
}
} int main()
{
int nCases;
scanf("%d",&nCases);
while( nCases-- )
{
int sX,sY,eX,eY;
scanf("%d%d%d%d",&sX,&sY,&eX,&eY);
memcpy(mazeH,maze,sizeof(maze));//把maze拷贝到mazeH中;
int ans=bfs(sX,sY,eX,eY);//bfs搜索
printf("%d\n",ans);
}
return ;
}

代码二:这个简单点

 #include<stdio.h>
#define min(x,y) x<y?x:y;
int map[][]={ ,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,, };
int x1,x2,y1,y2,m;
void dfs(int x,int y,int s)
{
if(map[x][y]) return ;
if(x==x2&&y==y2)
{
m=min(s,m);
return ;
}
s++;
map[x][y]=;
dfs(x+,y,s);
dfs(x-,y,s);
dfs(x,y+,s);
dfs(x,y-,s);
map[x][y]=;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
m=;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
dfs(x1,y1,);
printf("%d\n",m);
}
return ;
}

ny58 最小步数的更多相关文章

  1. POJ 1753 Flip Game (高斯消元 枚举自由变元求最小步数)

    题目链接 题意:4*4的黑白棋,求把棋全变白或者全变黑的最小步数. 分析:以前用状态压缩做过. 和上题差不多,唯一的不同是这个终态是黑棋或者白棋, 但是只需要把给的初态做不同的两次处理就行了. 感觉现 ...

  2. yzoi2226最小步数的详细解法

    Description - 问题描述 在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”.有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字. ...

  3. One Person Game(扩展欧几里德求最小步数)

    One Person Game Time Limit: 2 Seconds      Memory Limit: 65536 KB There is an interesting and simple ...

  4. Algorithm --> 棋盘中求出A到B的最小步数

    求出A到B的最小步数 给定象棋盘,以及位置A和B, 求出从A到B的最小步数 代码: #include <cstdio> #include <iostream> #include ...

  5. 1到n的最小步数

    1到n的最小步数 Time Limit: 1 Sec  Memory Limit: 128 MB 给你一个数n,让你求从1到n的最小步数是多少. 对于当前的数x有三种操作: 1:  x+1 2:  x ...

  6. [leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. ZOJ 3593 One Person Game(拓展欧几里得求最小步数)

    One Person Game Time Limit: 2 Seconds      Memory Limit: 65536 KB There is an interesting and simple ...

  8. 带你学习BFS最小步数模型

    最小步数模型 一.简介 最小步数模型和最短路模型的区别? 最短路模型:某一个点到另一个点的最短距离(坐标与坐标之间) 最小步数模型:不再是点(坐标),而是状态到另一个状态的转变 BFS难点所在(最短路 ...

  9. yzoi1109&&viojs1042最小步数的一点看法——回文数

    Description - 问题描述 有一天,雄霸传授本人风神腿法第一式:捕风捉影..............的步法(弟子一:堂主,你大喘气呀.风:你给我闭嘴.)捕风捉影的关键是换气(换不好就会大喘气 ...

随机推荐

  1. 【转】Spring中IoC的优点与缺点

    1. 优点 我们知道,在Java基本教程中有一个定律告诉我们:所有的对象都必须创建:或者说:使用对象之前必须创建,但是现在我们可以不必一定遵循这个定律了,我们可以从Ioc容器中直接获得一个对象然后直接 ...

  2. jquery.dataTables动态列

    jquery.dataTables  版本1.10.7 直接上代码: 0.table <table id="popReportTable"> <thead> ...

  3. 算法笔记_119:蓝桥杯第六届省赛(Java语言A组)试题解答

     目录 1 熊怪吃核桃 2 星系炸弹 3 九数分三组 4 循环节长度 5 打印菱形 6 加法变乘法 7 牌型种数 8 移动距离 9 垒骰子 10 灾后重建   前言:以下试题解答代码部分仅供参考,若有 ...

  4. redis_session_store.py

    # -*- coding: utf-8 -*- """ Created on 09/11/2011 @author: Carlo Pires <carlopires ...

  5. BZOJ 1040 ZJOI 2008 骑士 基环树林+树形DP

    题目大意:有一些骑士.他们每个人都有一个权值.可是因为一些问题,每个骑士都特别讨厌还有一个骑士.所以不能把他们安排在一起.求这些骑士所组成的编队的最大权值和是多少. 思路:首先貌似是有向图的样子,可是 ...

  6. mysql循环批量插入测试数据

    http://blog.51cto.com/tianxingzhe/1676097 DROP PROCEDURE test_insert ; DELIMITER $$ CREATE PROCEDURE ...

  7. urlparse模块(专门用来解析URL格式)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #urlparse模块(专门用来解析URL格式) #URL格式: #protocol ://hostname[ ...

  8. iOS-按钮单选与多选逻辑处理

    概述 循环创建按钮, 进行按钮单选或者多选的操作. 详细 代码下载:http://www.demodashi.com/demo/10712.html 我们经常会有多行多列按钮的页面, 这个时候我们通常 ...

  9. Apache-一个IP多个主机域名

    #配置虚拟主机名 NameVirtualHost 192.168.209.128 <VirtualHost 192.168.209.128> DocumentRoot /htdocs/wi ...

  10. cxGrid显示行号

    定义一个类: TMyCxGrid = class(TObject) class procedure DrawIndicatorCell( Sender: TcxGridTableView; ACanv ...