6-5 巡逻机器人 uva1600
2024-08-24 11:45:59
一开始按照标准bfs来写 标记为二维数组
后来按照三维数组写过了 ps大部分bfs都不会是二维数组搞定!!!
其中有一个bug弄了半个小时。。。
一开始我是先判断!vis【x】【y】【v.c】 再判断方块是否为1 是的话v.c++;否的话归零
但是 这并不科学 到另外一个方块的时候 如果数组下标内容和结构体有关的话 应该先改变状态再判断 就如同肯定是先在u的基础上改变dx dy 再判断v.x v.y 一个道理 不然会超时!因为头不对尾
#include<bits/stdc++.h>
using namespace std; int m1[][];int n,m,chance;
bool vis[][][];
int dx[]={,,,-};
int dy[]={,,-,};
struct node
{
int x,y,d,c;
node(int x=,int y=,int d=,int c=):x(x),y(y),d(d),c(c){}
}; bool inmap(int x,int y)
{
if(x>=&&x<=n&&y>=&&y<=m)return true;
return false; } void bfs()
{ memset(vis,false,sizeof(vis));
node u(,,,);
queue<node>q;
q.push(u);
vis[][][]=true;
while(!q.empty())
{
u=q.front();q.pop(); if(u.x==n&&u.y==m){printf("%d\n",u.d);return;}
for(int i=;i<;i++)
{
node v(u.x+dx[i],u.y+dy[i],u.d+,u.c); if(m1[v.x][v.y])
v.c++;
else v.c=;
if(v.c<=chance&&!vis[v.x][v.y][v.c]&&inmap(v.x,v.y))
{
vis[v.x][v.y][v.c]=true; q.push(v); } }
}
printf("-1\n");
return ; } int main()
{
int cas;cin>>cas;
while(cas--)
{
scanf("%d %d %d",&n,&m,&chance);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&m1[i][j]); bfs(); } }
最新文章
- smarty中使用truncate出现乱码,用mb_substr解决
- 小伙伴们惊呆了!10行 JavaScript 实现文本编辑器
- weblogic安装失败
- Spring源码之SimpleAliasRegistry解读(一)
- Spark Streaming揭秘 Day12 数据安全容错(Executor篇)
- Freemarker的常用技巧总结
- Nginx PHP MySql 编译安装
- Java探秘之神秘的字符串String(二)
- 从实践的角度理解cookie的几个属性
- spring boot1.0 集成quartz 动态配置定时任务
- java的四种内部类详解
- Django 分页器
- Oracle与MySQL的SQL语句区别
- STL六大组件
- 一个简单的Kubernetes应用部署示例
- spring 配置文件 获取变量(PropertyPlaceholderConfigurer)
- WP8.1学习系列(第二章)——Toast通知
- python+Django框架运用(三)
- 开了几天的phpmyadmin的总结
- 为什么ArrayList remove报错