一开始按照标准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(); } }

最新文章

  1. smarty中使用truncate出现乱码,用mb_substr解决
  2. 小伙伴们惊呆了!10行 JavaScript 实现文本编辑器
  3. weblogic安装失败
  4. Spring源码之SimpleAliasRegistry解读(一)
  5. Spark Streaming揭秘 Day12 数据安全容错(Executor篇)
  6. Freemarker的常用技巧总结
  7. Nginx PHP MySql 编译安装
  8. Java探秘之神秘的字符串String(二)
  9. 从实践的角度理解cookie的几个属性
  10. spring boot1.0 集成quartz 动态配置定时任务
  11. java的四种内部类详解
  12. Django 分页器
  13. Oracle与MySQL的SQL语句区别
  14. STL六大组件
  15. 一个简单的Kubernetes应用部署示例
  16. spring 配置文件 获取变量(PropertyPlaceholderConfigurer)
  17. WP8.1学习系列(第二章)——Toast通知
  18. python+Django框架运用(三)
  19. 开了几天的phpmyadmin的总结
  20. 为什么ArrayList remove报错

热门文章

  1. nlogn LIS模板
  2. luogu P2515 [HAOI2010]软件安装
  3. node版本管理工具nvm安装以及使用
  4. Adroid反编译资料收集
  5. oracle新建对象 权限管理
  6. word打不开怎么办?
  7. phantomjs 下拉滚动条获取网页的全部源码
  8. echo -e 参数
  9. nagios系列(五)之nagios图形显示的配置及自定义插件检测密码是否修改详解
  10. mysql报错问题解决MySQL server PID file could not be found!