【队列】C++队列头文件<queue>的应用
来源:互联网 发布:java static 编辑:程序博客网 时间:2024/05/17 08:15
Sample Input
15 5S-###-----##---E#------##
Sample Output
9
//BFS 广度优先搜索#include<stdio.h>#include<queue>using namespace std;int vis[110][110];int dir[4][2]={0,1,1,0,-1,0,0,-1};char c[110][110];int w,h,t;struct list{int x,y;int step;}a;int mini=0;queue<list> que; //定义队列//que.push(a);队尾进队列,a为进队列元素//que.pop();队首出队列//list temp=que.front();队首的元素//int size=que.size();元素个数//while(!que.empty())que.pop();重复使用时,初始化清空队列int BFS(struct list a){while(!que.empty()) que.pop();list now,temp;que.push(a);int i;while(!que.empty()){now=que.front();que.pop();for(i=0;i<4;++i){temp.x=now.x+dir[i][0];temp.y=now.y+dir[i][1];temp.step=now.step+1;if(vis[temp.x][temp.y]==0){if(temp.x>=0&&temp.x<w&&temp.y>=0&&temp.y<h){if(c[temp.x][temp.y]=='E'){return temp.step;}if(c[temp.x][temp.y]=='-'){vis[temp.x][temp.y]=1;que.push(temp);}}}}}return 0;}int main(void){int i,j,k;scanf("%d",&t);for(i=0;i<t;++i){mini=0;scanf("%d %d\n",&h,&w);for(j=0;j<h;++j){for(k=0;k<w;++k){scanf("%c",&c[k][j]);vis[k][j]=0;}getchar();}for(j=0;j<h;++j){for(k=0;k<w;++k){if(c[k][j]=='S'){a.x=k,a.y=j,a.step=0;mini=BFS(a);if(mini!=0){printf("%d\n",mini);}else{printf("-1\n");}break;}}if(k!=w)break;}}return 0;}
0 0
- 【队列】C++队列头文件<queue>的应用
- 【C++】队列容器 头文件 #include<queue> 解读
- 使用linux中标准的queue.h头文件插件链表,队列,循环队列
- 队列头文件C语言
- 链队列头文件“queue.h”(转)
- queue-c链式队列
- C++_队列(Queue)
- [c]队列queue
- C#queue队列总结
- 队列(Queue)的python实现及其应用
- 【day0414 C++】queue 队列的使用
- 队列(Queue)的C语言实现
- 二项队列头文件C语言
- 队列的实现 queue
- 队列queue的使用方法
- queue队列的实现
- (POJ 2259) Team Queue 队列的应用 (队列的队列)
- 自己编写链队列的头文件
- C,C++宏中#与##的讲解
- C,C++中使用可变参数
- 秒杀多线程第一篇 多线程笔试面试题汇总
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- 秒杀多线程第三篇 原子操作 Interlocked系列函数
- 【队列】C++队列头文件<queue>的应用
- 秒杀多线程第四篇 一个经典的多线程同步问题
- synopsys VCS 和 VCS_MX的区别
- BCD码、十六进制与十进制互转
- 秒杀多线程第五篇 经典线程同步 关键段CS
- 秒杀多线程第六篇 经典线程同步 事件Event
- 秒杀多线程第七篇 经典线程同步 互斥量Mutex
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量