UVa11624-Fire!(bfs)
来源:互联网 发布:查微信聊天记录的软件 编辑:程序博客网 时间:2024/06/16 07:53
题目链接
分析:
火是不会自动熄灭的
所以我们先预处理出火蔓延到每一个格子的最早时间
然后bfsJoe的行动路线就可以了
tip
我把所有的信息都放在一个矩阵中维护
结果就一直WA
然后我就把火和地图两个信息分别维护
就变成了RE
(鬼知道为什么。。。有人愿意解答吗???!!!)
//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int N=1002;int zz[4][2]={{1,0},{0,1},{-1,0},{0,-1}};int mp[N][N],xx,yy;int n,m,f[N][N];int q[N*N][2],tou,wei;void bfs1(){ do { int x=q[++tou][0]; int y=q[tou][1]; int time=f[x][y]+1; int xa,ya; for (int i=0;i<4;i++) { xa=x+zz[i][0]; ya=y+zz[i][1]; if (xa>n||ya>m||xa<1||ya<1||f[xa][ya]!=0||mp[xa][ya]==-1) continue; f[xa][ya]=time; wei++; q[wei][0]=xa; q[wei][1]=ya; } } while (tou<wei);}int bfs2(){ tou=wei=0; q[++wei][0]=xx; q[wei][1]=yy; mp[xx][yy]=1; do { int x=q[++tou][0]; int y=q[tou][1]; int xa,ya; if (x>=n||y>=m||x<=1||y<=1) return mp[x][y]; int time=mp[x][y]+1; for (int i=0;i<4;i++) { xa=x+zz[i][0]; ya=y+zz[i][1]; if (mp[xa][ya]==-1||f[xa][ya]<=time) continue; mp[xa][ya]=time; wei++; q[wei][0]=xa; q[wei][1]=ya; } } while (tou<wei); return 0;}int main(){ int T; scanf("%d",&T); while (T--) { memset(mp,0,sizeof(mp)); memset(f,0,sizeof(f)); tou=wei=0; scanf("%d%d",&n,&m); char s[N]; for (int i=1;i<=n;i++) { scanf("%s",&s); for (int j=0;j<m;j++) if (s[j]=='#') mp[i][j+1]=-1; else if (s[j]=='F') { q[++wei][0]=i; q[wei][1]=j+1; f[i][j+1]=1; } else if (s[j]=='J') xx=i,yy=j+1; } bfs1(); //fire int ans=bfs2(); if (ans>0) //Jeo printf("%d\n",ans); else printf("IMPOSSIBLE\n"); } return 0;}
阅读全文
0 0
- UVa11624-Fire!(bfs)
- Uva11624 Fire(bfs 搜索)
- UVa11624 Fire!(BFS+迷宫)
- UVA11624:Fire!(BFS + 优化)
- UVA11624 Fire! 两次BFS(J)
- UVA11624-Fire!(两次bfs)
- [bfs] UVA11624-Fire!
- UVA11624 Fire BFS
- uva11624 Fire! (双bfs)
- UVA11624 Fire! BFS
- UVA11624 Fire 两次BFS
- UVA11624 Fire!【BFS+细心】
- uva11624 fire bfs 最短路
- UVA11624 Fire! —— BFS
- UVA11624 Fire! 两次BFS 读懂题意很重要
- UVA11624 Fire! (两点广搜BFS)
- Fire! UVA11624
- UVA11624 Fire!
- java 使用POI批量导入excel数据
- Kamailio glossary & misc(持续更新)
- 二进制中1的个数
- Java内存泄漏
- 1.1 数据的接收 之 初来乍到
- UVa11624-Fire!(bfs)
- 精通CSS、PHP、C、C++、C#、Java、Ruby、python、Objective-C、Pascal、spss、sas
- 集合源码学习(一):Collection
- 方法的重写
- 【java】Object的公用方法
- Spark是什么(初识)
- ubuntu 设定永久dns
- js 全选,反选
- 响应对象