Codeforces Round #301 (Div. 2) C. Ice Cave(BFS)
2016-07-27 18:22
330 查看
题目地址:http://codeforces.com/problemset/problem/540/C
思路:从起始点走,每次走到一个‘.'点,则将其置为‘X'并加入队列,当搜索到节点为’X'且该节点为终点时,则成功抵达。若不存在,则无法到达。
思路:从起始点走,每次走到一个‘.'点,则将其置为‘X'并加入队列,当搜索到节点为’X'且该节点为终点时,则成功抵达。若不存在,则无法到达。
#include<cstdio> #include<cstdlib> #include<queue> #include<cstring> #include<iostream> #include<algorithm> using namespace std; struct Node { int x,y; }; const int dx[]={0,0,-1,1}; const int dy[]={-1,1,0,0}; int stx,sty,edx,edy,n,m; char g[550][550]; queue<Node> q; int solve() { g[stx][sty]='X'; Node tmp; tmp.x=stx,tmp.y=sty; q.push(tmp); while(!q.empty()) { Node now=q.front(); q.pop(); for(int i=0;i<4;i++) { int xx=now.x+dx[i]; int yy=now.y+dy[i]; if(xx>=1&&xx<=n&&yy>=1&&yy<=m) { if(g[xx][yy]=='X') { if(xx==edx&&yy==edy) return 1; continue; } g[xx][yy]='X'; Node nt; nt.x=xx,nt.y=yy; q.push(nt); } } } return 0; } int main() { scanf("%d%d",&n,&m); getchar(); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) scanf("%c",&g[i][j]); getchar(); } scanf("%d%d",&stx,&sty); scanf("%d%d",&edx,&edy); if(solve()) printf("YES\n"); else printf("NO\n"); return 0; }
相关文章推荐
- Hive ORC数据格式的MapReduce读写
- MFC_笔记
- Docker
- PHP-编译运行过程以及opcode缓存的笔记
- HDU 1846 Bash博弈
- MyBatis中小于等于号的处理
- iptables 相关问题
- 中国“互联网+”案例100征集活动正式启动
- Android----------短信消息提醒(Notification)
- 安装jupyter notebook
- Java 两个整数相除保留两位小数,将小数转化为百分数
- 278. First Bad Version [easy] (Python)
- 9.fork函数和父子进程共享文件
- 在Rxjava+Retrofit 2中检查网络连接和显示加载框
- ```C#学习(五)···
- 解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- ios app提交指南-协议、税务和银行业务
- JSP中<base href="<%=basePath%>">作用
- JAVA IO
- Delphi中挂接IWebBrowser2的自动化事件