zzuoj 10428: 奇怪的梦 (bfs)水
2016-01-03 16:14
381 查看
10428: 奇怪的梦
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 77 Solved: 23
[Submit][Status][Web
Board]
Description
spy常常做梦,有一天,他梦到他来到一片沼泽,好怕怕。。这里为了简化问题,把沼泽看成一个二维矩阵。
spy起始点在S。
要想离开这个沼泽地只能到达E才行。
除了起始点S和离开点E之外还有平地和沼泽地,分别用.和#表示。
平地表示可以走,沼泽地是很危险的,所以不能走。spy每次走只能往上下左右其中一个方向走一步。
然后他希望能够离开这里,所以你能够帮他吗?
Input
多组测试数据。每一组数据第一行有两个整数n,m(0 < n <= 100, 0 < m <= 100)。接下来是一个n*m的矩阵。'.'表示平地,‘#’表示沼泽,S表示起始位置,E表示终点。
Output
对于每一组数据输出一个“Yes”或者“No”,表示spy能否离开这里。Sample Input
2 2 S# .E 3 3 S.# .#. #.E
Sample Output
Yes No
HINT
注意这里S有且仅有一个,E可能有0个到多个。#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; int n,m; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; char a[110][110]; int b[110][110]; struct zz { int x; int y; }f1,f2; void bfs(int x,int y) { queue<zz>q; memset(b,0,sizeof(b)); f1.x=x;f1.y=y; b[x][y]=1; q.push(f1); while(!q.empty()) { f1=q.front(); q.pop(); if(a[f1.x][f1.y]=='E') { printf("Yes\n"); return ; } for(int i=0;i<4;i++) { f2.x=f1.x+dx[i]; f2.y=f1.y+dy[i]; if(f2.x>=0&&f2.x<n&&f2.y>=0&&f2.y<m&&!b[f2.x][f2.y]&&a[f2.x][f2.y]!='#') { b[f2.x][f2.y]=1; q.push(f2); } } } printf("No\n"); } int main() { int i,j; int sx,sy; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) scanf("%s",a[i]); for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(a[i][j]=='S') { sx=i; sy=j; } } } bfs(sx,sy); } return 0; }
相关文章推荐
- visual studio开发C#笔记03——多线程总结1
- 深入解析Java编程中final关键字的使用
- ubuntu常用快捷键记录
- 计算机组成原理实验之微程序控制器实验
- sql的left join
- iOS 二维码窗口
- Switch Management Interface Configuration
- ZigZag Conversion
- LeetCode 148:Sort List
- 刷LeetCode的正确姿势——第1、125题
- 109_征兵问题 conscription (poj 3723)
- 关于字符串匹配算法研究 http://www.cnblogs.com/Su-30MKK/archive/2012/09/17/2688122.html
- Lost executor on YARN
- mysql学习心得之二进制安装(4)
- 四则运算---2
- -------Pokemon Master------很水-------
- Android大牛博客
- 调试终端命令行的位置
- 2016, 新的一年,新的起点
- 两标关联update