Oh,mygoddess
2024-09-11 22:56:13
很早的时候就看了这一道题目 , 当时不会做 , 现在 边听歌边写无压力 ........
题意 : 光辉骑士 一直都在 迷宫的右上角 , 第一行给你迷宫的规格 , 下面是迷宫 "O" 代表空地需要花一个单位时间跨越 , "#" 代表
墙 ,需要三个单位的时间把墙破开 , 也就是 "O"为一个时间 "#"为4个时间 .
下面附上代码 .
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std;
struct node
{
int x,y,step;
friend bool operator <(node s1,node s2)
{
return s1.step>s2.step;
}
};
char a[][];
int n,m,tx,ty,b[][]={,-,,,-,,,},visited[][];
priority_queue<node>Q;
int BFS(int x,int y)
{
node q={x,y,};
Q.push(q);
while(!Q.empty())
{
node e=Q.top(); // 怎么会把 这里 忘了呢 ?
Q.pop();
for(int i=;i<;i++)
{
q.x=e.x+b[i][],q.y=e.y+b[i][]; //怎么 整天 都 弄错 ?
if(q.x>=&&q.x<m&&q.y>=&&q.y<n&&!visited[q.y][q.x])
{
if(a[q.y][q.x]=='O')
q.step=e.step+;
if(a[q.y][q.x]=='#')
q.step=e.step+;
visited[q.y][q.x]=;
Q.push(q);
if(q.x==tx&&q.y==ty) //注意 安放的位置
{
return q.step;
}
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
scanf(" %c",&a[i][j]);
}
}
scanf("%d%d",&ty,&tx);
tx--;
ty--;
memset(visited,,sizeof(visited));
visited[][]=;
while(!Q.empty()) // 注意 清空
Q.pop();
int mark=BFS(,);
printf("%d\n",mark);
}
}
最新文章
- 特殊的数据类型: bit、sql_variant、sysname
- 将.dat文件导入数据库
- SQL Server调优系列基础篇(子查询运算总结)
- Inno Setup制作应用程序安装包
- Android ListView 图片异步加载和图片内存缓存
- POJ 1961 Period( KMP )*
- 虚拟机下运行linux通过nat模式与主机通信、与外网连接
- 安装JDK设置环境变量
- jQuery慢慢啃之事件对象(十一)
- php使用 _before_index() 来实现访问页面前,判断登录
- [Android学习笔记]双缓冲绘图技术
- Requests库介绍
- 网站开发进阶(二十二)HTML UI知识汇总(更新中...)
- Eclipse中使用Maven搭建SSM框架
- SSH连接GitHub并配置ssh key
- U66785 行列式求值
- laravel读取excel
- Django Rest framework 框架之认证使用和源码执行流程
- day32 process模块用法
- 开发环境之git:团队协作git工作流与常用命令