FZU 2150 Fire Game
来源:互联网 发布:js 什么时候使用链表 编辑:程序博客网 时间:2024/06/05 12:38
题意:输入n行m列的图,‘#’表示草坪,任选两个草坪点火,火只能在草坪上蔓延,求烧光所有草坪的最短时间
解题思路:两点bfs.要注意的是可能只有一块草坪,但暴力的话这种情况也包括在内。因为数据较小,直接枚举就可以了,任选两块草坪,bfs找出当前情况下烧光所有草坪的时间,不断更新最小时间即可.还有一点就是判断时要用d[nx][ny]>d[p.x][p.y]+1,不能直接判断等不等于INF,因为两点同时bfs可能会烧到同一片草坪,而这片草坪被烧的时间应该是较早的那一个
代码:
#include <iostream>#include <algorithm>#include <string>#include <cstring>#include <cmath>#include <cstdio>#include <queue>using namespace std;#define INF 0x3f3f3f3fint dr[]= {-1,0,1,0};int dc[]= {0,1,0,-1};int m,n;char g[15][15];int d[15][15];struct P{ int x,y; P(int a=0,int b=0):x(a),y(b) {}};bool inside(int x,int y){ return x>=0&&x<n&&y>=0&&y<m;}int bfs(int x,int y,int xx,int yy){ for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { d[i][j]=INF; } } queue<P> q; q.push(P(x,y)); q.push(P(xx,yy)); d[x][y]=0; d[xx][yy]=0; while(!q.empty()) { P p=q.front(); q.pop(); for(int i=0; i<4; i++) { int nx=p.x+dr[i],ny=p.y+dc[i]; if(inside(nx,ny)&&d[nx][ny]>d[p.x][p.y]+1&&g[nx][ny]=='#') { q.push(P(nx,ny)); d[nx][ny]=d[p.x][p.y]+1; } } } int maxt=-1; for(int i=0; i<n; i++)//可能有的草坪烧不到 { for(int j=0; j<m; j++) { if(g[i][j]=='#')maxt=max(maxt,d[i][j]); } } return maxt;}int main(){ int tt; cin>>tt; int cas=0; while(tt--) { cin>>n>>m; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { cin>>g[i][j]; } } int t,mint=INF; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(g[i][j]=='#') { for(int k=0; k<n; k++) { for(int l=0; l<m; l++) { if(g[k][l]=='#') { t=bfs(i,j,k,l); mint=min(t,mint); } } } } } } cout<<"Case "<<++cas<<": "; if(mint==INF)cout<<-1<<endl; else cout<<mint<<endl; } return 0;}
阅读全文
0 0
- FZU 2150 Fire Game
- FZU 2150 Fire Game
- FZU 2150 Fire Game
- FZU 2150 Fire Game
- FZU 2150 Fire Game
- FZU-2150 Fire Game
- fzu 2150 Fire Game
- FZU 2150 Fire Game
- FZU 2150 - Fire Game
- fzu 2150 Fire Game
- FZU 2150 Fire Game
- FZU 2150 Fire Game
- FZU 2150Fire Game
- FZU 2150 Fire Game
- FZU-2150-Fire Game
- FZU 2150 Fire Game
- fzu 2150 Fire Game
- FZU-2150 Fire Game
- leetcode 153. Find Minimum in Rotated Sorted Array
- mipi协议中文详解
- P1195 口袋的天空(并查集+Kruskal)
- 1999-逆序排列
- sorl 6.6.0 定时更新索引
- FZU 2150 Fire Game
- 去掉ueditor默认过滤转换机制
- AVR基础
- vxWorks系统任务tJobTask的实现及使用
- java线程池
- Flink 入门
- 【转载】Web移动端Fixed布局的解决方案
- trap or not 对于link 时产生的不同的错误信息
- String、StringBuffer与StringBuilder之间区别