uva11624
来源:互联网 发布:清除软件残留 编辑:程序博客网 时间:2024/06/05 07:21
BFS,多个起始点问题,要注意BFS里面的判断条件,要不很容易出错
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn =1000+10;const int inf = 100000000;typedef pair<int,int> P;int T,n,m,sx,sy,cnt;int mp[maxn][maxn],d[maxn][maxn],d_p[maxn][maxn];int dx[4]= {1,0,-1,0},dy[4]= {0,1,0,-1};void bfs_fire(){ queue<P>que; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { d[i][j]=inf; if(mp[i][j]==1) { que.push(P(i,j)); d[i][j]=0; } } while(que.size()) { P p=que.front(); que.pop(); for(int i=0; i<4; i++) { int nx=p.first+dx[i],ny=p.second+dy[i]; if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&mp[nx][ny]==0&&d[nx][ny]==inf) { que.push(P(nx,ny)); d[nx][ny]=d[p.first][p.second]+1; } } }}int bfs_people(){ for(int i=0; i<=1010; i++) for(int j=0; j<=1010; j++) d_p[i][j]=inf; 将整个图遍历,图外围的一圈也得遍历。 d_p[sx][sy]=0; queue<P>queu; queu.push(P(sx,sy)); while(queu.size()) { P p=queu.front(); queu.pop(); for(int i=0; i<4; i++) { int nx=p.first+dx[i],ny=p.second+dy[i];// printf("&&&&%d&&&&\n",d_p[nx][ny]); if(d_p[nx][ny]<inf)continue;注意判断这个地方 d_p[nx][ny]=d_p[p.first][p.second]+1; if(nx<1||nx>n||ny<1||ny>m) return d_p[nx][ny]; if(d_p[nx][ny]<d[nx][ny]&&mp[nx][ny]!=-1) queu.push(P(nx,ny)); } } return -1;}char ch;int main(){ scanf("%d",&T); while(T--) { memset(mp,0,sizeof(mp)); memset(d_p,0,sizeof(d_p)); scanf("%d %d",&n,&m); getchar(); for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { scanf("%c",&ch); if(ch=='#') mp[i][j]=-1; if(ch=='F') mp[i][j]=1; if(ch=='J') { sx=i,sy=j; } } getchar(); } bfs_fire(); cnt=bfs_people();// for(int i=1; i<=n; i++)// {// for(int j=1; j<=m; j++)// {// printf("%d ",d_p[i][j]);// }// printf("\n");// } if(cnt==-1) printf("IMPOSSIBLE\n"); else printf("%d\n",cnt); } return 0;}
0 0
- UVA11624
- uva11624
- uva11624
- uva11624
- uva11624
- Fire! UVA11624
- UVA11624 Fire!
- uva11624 - Fire!
- uva11624 Fire!
- UVA11624 Fire!
- UVa11624 Fire!
- UVA11624 Fire!
- UVA11624----Fire!
- UVA11624 Fire!
- UVA11624 Fire!
- UVA11624 Fire!
- UVA11624 Fire!
- UVA11624 Fire!
- silverlight 弹窗定位到线的方法
- 菜鸟进阶之Android Touch事件传递(四)
- Obtain a SAML Token ----获取SAML令牌
- VC6.0 error LNK2001: unresolved external symbol _main解决办法
- Request
- uva11624
- POJ 2774 Long Long Message(最长公共子串 -初学后缀数组)
- iOS开发多线程篇—线程的状态
- “ExternalException (0x80004005): GDI+ 中发生一般性错误”的问题
- windows下忘记oracle用户名密码,通过sqlplus找回
- 1074. Reversing Linked List (25)
- ubuntu下使用vi命令修改文件并保存实例
- Java程序员应该常思考的问题
- 机器学习&数据挖掘(常见面试之机器学习算法思想简单梳理