poj3009

news/2024/7/2 21:19:21

一、题意:给定一个矩形区域,代表冰球场。每个单元格可有四种数值:2是冰球的起始位置;3代表冰球最后需要到达的位置;0代表空,球可通过;1代表障碍物,球碰撞一次后,1变成0,球停在1前面那个位置。球只能上下左右移动(一次朝一个方向移动直至碰到1或者3或者出界为止)。求球从2到3的最短步数(必须小于等于10才算),没有则输出-1;

 

二、思路:遍历球可走的所有情况,找出最短路径。这里需要注意的是步数的回溯。

 

三、代码:

#include"iostream"
#include"stdio.h"
#include"istream"
using namespace std;const int MAXN=25;int filed[MAXN][MAXN];
int column,row,sx,sy,ex,ey,steps,miniSteps;bool IsEdge(int x,int y)
{if(x>=0&&x<row&&y>=0&&y<column)return true;return false;
}bool IsEnd(int x,int y)
{if(x==ex&&y==ey)return true;return false;
}void Dfs(int x,int y)
{if(steps>10) return;int dir[8]={0,1,0,-1,1,0,-1,0};for(int i=0;i<8;i+=2){int dx=x+dir[i];int dy=y+dir[i+1];if(IsEdge(dx,dy)){if(IsEnd(dx,dy)){steps++;if(miniSteps>steps)miniSteps=steps;steps--;return;}else if(filed[dx][dy]==0){while(IsEdge(dx,dy)&&filed[dx][dy]==0){dx+=dir[i];dy+=dir[i+1];}if(IsEdge(dx,dy)){if(IsEnd(dx,dy)){steps++;if(miniSteps>steps)miniSteps=steps;steps--;return;}steps++;filed[dx][dy]=0;Dfs(dx-dir[i],dy-dir[i+1]);//   cout<<dx-dir[i]<<' '<<dy-dir[i+1]<<endl;filed[dx][dy]=1;steps--;}}}}return;
}int main()
{// freopen("in.txt","r",stdin);while(cin>>column>>row,column&&row){for(int i=0;i<row;i++){for(int j=0;j<column;j++){cin>>filed[i][j];if(filed[i][j]==2){sx=i;sy=j;}if(filed[i][j]==3){ex=i;ey=j;}}}steps=0;miniSteps=11;filed[sx][sy]=0;Dfs(sx,sy);if(miniSteps<=10)cout<<miniSteps<<endl;elsecout<<-1<<endl;}return 0;
}

  

转载于:https://www.cnblogs.com/acm-jing/p/9554768.html


http://lihuaxi.xjx100.cn/news/237190.html

相关文章

如何设置Java Spring Boot JWT授权和认证

In the past month, I had a chance to implement JWT auth for a side project. I have previously worked with JWT in Ruby on Rails, but this was my first time in Spring. 在过去的一个月中&#xff0c;我有机会为辅助项目实现JWT auth。 我以前曾在Ruby on Rails中使用…

EOS共识机制——DPoS代理权益证明

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链共识机制与它的演进&#xff0c;是由于区块链式去中心化而且分布式的系统&#xff0c;必须要有一套放诸四海皆准类似宪法的规则&#xff0c;来…

docker的用法

Docker是开发人员和系统管理员构建&#xff0c;发布和运行分布式应用程序的开放平台&#xff0c;可以在笔记本电脑、数据中心、虚拟机还有云服务器上运行。 使用Docker工具来提高生产率的方法&#xff1a;本地依赖&#xff1a;你需要在本地系统上快速试用 magento 吗&#xff1…

前端面试的作品示例_如何回答任何技术面试问题-包括示例

前端面试的作品示例Technical interviews can be extremely daunting. From the beginning of each question to the end, its important to know what to expect, and to be aware of the areas you might be asked about. 技术面试可能会非常艰巨。 从每个问题的开始到结束&a…

Win10 下 RabbitMQ 的 安装 配置

记录下本人在win10环境下安装RabbitMQ的步骤&#xff0c;以作备忘。 第一步&#xff1a;下载并安装erlang 原因&#xff1a;RabbitMQ服务端代码是使用并发式语言Erlang编写的&#xff0c;安装Rabbit MQ的前提是安装Erlang。下载地址&#xff1a;http://www.erlang.org/download…

智能合约和区块链技术:入门指南

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 智能合约和区块链技术&#xff1a;入门指南 多年前&#xff0c;在没有数字合约和区块链技术存在的情况下&#xff0c;双方的合约往往以传统的方式进…

node/js 漏洞_6个可用于检查Node.js中漏洞的工具

node/js 漏洞Vulnerabilities can exist in all products. The larger your software grows, the greater the potential for vulnerabilities. 所有产品中都可能存在漏洞。 您的软件增长得越大&#xff0c;潜在的漏洞就越大。 Vulnerabilities create opportunities for expl…

什么是网络爬虫,网络爬虫有什么用?

什么是网络爬虫&#xff0c;网络爬虫有什么用&#xff1f; 简单地说&#xff0c;就是把网页所展示数据通过非人工的手段获取下来。 现在是大数据时代&#xff0c;数据分析是解决各行各业相关问题重要的依据。数据分析结果的准确性有很大一部分取决于数据量是否足够大。如果是几…