当前位置: 首页 > news >正文

模板 BFS

【模板】BFS

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <queue>
 4 using namespace std;
 5 
 6 struct node
 7 {
 8     int x,y,step;
 9 };
10 
11 char map[105][105];
12 int vis[105][105];
13 int to[4][2]= {1,0,-1,0,0,1,0,-1};
14 int n,m,sx,sy,ex,ey,ans;
15 
16 int check(int x,int y)
17 {
18     if(x<0 || x>=n || y<0 || y>=m)
19         return 1;
20     if(vis[x][y] || map[x][y]=='#')
21         return 1;
22     return 0;
23 }
24 
25 void bfs()
26 {
27     int i;
28     queue<node> Q;
29     node a,next;
30     a.x = sx;
31     a.y = sy;
32     a.step = 0;
33     vis[a.x][a.y]=1;
34     Q.push(a);
35     while(!Q.empty())
36     {
37         a = Q.front();
38         Q.pop();
39         if(map[a.x][a.y]=='E')
40         {
41             ans = a.step;
42             return ;
43         }
44         for(i = 0; i<4; i++)
45         {
46             next = a;
47             next.x+=to[i][0];
48             next.y+=to[i][1];
49             if(check(next.x,next.y))
50                 continue;
51             next.step=a.step+1;
52             vis[next.x][next.y] = 1;
53             Q.push(next);
54         }
55     }
56     ans = -1;
57 }
58 
59 int main()
60 {
61     int t;
62     scanf("%d",&t);
63     while(t--)
64     {
65         scanf("%d%d",&n,&m);
66         int i,j;
67         for(i = 0; i<n; i++)
68             scanf("%s",map[i]);
69         for(i = 0; i<n; i++)
70         {
71             for(j = 0; j<m; j++)
72             {
73                 if(map[i][j]=='S')
74                 {
75                     sx = i;
76                     sy = j;
77                 }
78             }
79         }
80         memset(vis,0,sizeof(vis));
81         bfs();
82         printf("%d\n",ans);
83     }
84 
85     return 0;
86 }

 

转载于:https://www.cnblogs.com/jeff-wgc/p/4472930.html

相关文章:

  • 类加载器及其委托机制的深入分析
  • 《.NET 4.0面向对象编程漫谈》勘误表(2011年1月14日更新)
  • 【转】Android中的内存管理--不错不错,避免使用枚举类型
  • VisualSVN server安装及使用 转
  • Protobuf-net学习笔记
  • how to solve ORA-02293
  • (floyd+补集) poj 3275
  • 我大四了,oh,我要毕业了 _随笔
  • MeeGo handset 1.1开发环境[3]:直接使用Qemugl
  • Resharper
  • C++ VS C#(1):注释,变量,控制台输出
  • 我的java mvc
  • 项目管理学习笔记三:项目管理一般知识
  • Markdown——入门指南
  • 项目管理学习笔记四:项目立项管理
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【个人向】《HTTP图解》阅后小结
  • 2017 前端面试准备 - 收藏集 - 掘金
  • cookie和session
  • Git 使用集
  • HashMap剖析之内部结构
  • Java读取Properties文件的六种方法
  • k8s 面向应用开发者的基础命令
  • Laravel核心解读--Facades
  • Meteor的表单提交:Form
  • Travix是如何部署应用程序到Kubernetes上的
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 动态魔术使用DBMS_SQL
  • 机器学习 vs. 深度学习
  • 聊一聊前端的监控
  • 日剧·日综资源集合(建议收藏)
  • 使用SAX解析XML
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 思维导图—你不知道的JavaScript中卷
  • 字符串匹配基础上
  • nb
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 湖北分布式智能数据采集方法有哪些?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​ubuntu下安装kvm虚拟机
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • %@ page import=%的用法
  • (1)(1.13) SiK无线电高级配置(五)
  • (175)FPGA门控时钟技术
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (多级缓存)缓存同步
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)c52学习之旅-点亮LED灯
  • (三)模仿学习-Action数据的模仿
  • (四)【Jmeter】 JMeter的界面布局与组件概述