USACO--2.4Overfencing
来源:互联网 发布:microsoft软件 编辑:程序博客网 时间:2024/05/08 11:39
思路还是比较简单的:只需要求出每个点到出口的最近距离,然后在去其中的最大值作为答案。这个题目麻烦在建图,我建图的时候是将每个点的4个方向的情况都处理出来,然后再进行bfs。其实也可以直接处理出相关点的连通性。然后就是这个题目有两个出口,但是我们只需要将他们一次入队,就可以求出每个点到出口的最近距离了,而不用进行两次bfs(其实也可以加一个源点连接着两个点,可以达到同样的效果)。
代码如下:
/*ID:15674811LANG:C++PROG:maze1*/#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;#define INF 0x3f3f3f3fstruct m{ int flag[5];}M[220][110];typedef struct{ int x,y,cnt;}P;P p1,p2,p3,p4;queue<P>Q;int ans,n,m,vis[220][110],d;bool check1(int x,int y){ if(x<0||x>=n||y<0||y>=m) return false; if(vis[x][y]) return false; return true;}bool check2(int x,int y){ if(x==0||x==2*n) return true; if(y==0||y==2*m) return true; return false;}///上下左右int dx[]={-1,1,0,0};int dy[]={0,0,-1,1};void bfs(){ while(!Q.empty()) { p1=Q.front(); Q.pop(); for(int k=0;k<4;k++) { int xx=p1.x+dx[k]; int yy=p1.y+dy[k]; if(!check1(xx,yy)) continue; ///这里要特别注意不要写成:M[xx][yy].flag[k]了 if(M[p1.x][p1.y].flag[k]==0) continue; vis[xx][yy]=1; p2.x=xx; p2.y=yy; p2.cnt=p1.cnt+1; ans=max(ans,p2.cnt); Q.push(p2); } }}int main(){ //freopen("lkl.txt","r",stdin); freopen("maze1.in","r",stdin); freopen("maze1.out","w",stdout); char str[220][110]; while(scanf("%d%d",&m,&n)!=EOF) { getchar(); memset(vis,0,sizeof(vis)); memset(M,0,sizeof(M)); for(int i=0;i<2*n+1;i++) gets(str[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(str[2*i][2*j+1]==' ') { M[i][j].flag[0]=1; if(check2(2*i,2*j+1)) { vis[i][j]=1; p1.x=i; p1.y=j; p1.cnt=1; Q.push(p1); } } if(str[2*i+2][2*j+1]==' ') { M[i][j].flag[1]=1; if(check2(2*i+2,2*j+1)) { vis[i][j]=1; p1.x=i; p1.y=j; p1.cnt=1; Q.push(p1); } } if(str[2*i+1][2*j]==' ') { M[i][j].flag[2]=1; if(check2(2*i+1,2*j)) { vis[i][j]=1; p1.x=i; p1.y=j; p1.cnt=1; Q.push(p1); } } if(str[2*i+1][2*j+2]==' ') { M[i][j].flag[3]=1; if(check2(2*i+1,2*j+2)) { vis[i][j]=1; p1.x=i; p1.y=j; p1.cnt=1; Q.push(p1); } } } ans=1; ///ans要初始化为1而不是0,防止图中只有出口的情况出错 bfs(); printf("%d\n",ans); } return 0;}
0 0
- USACO 2.4.3 Overfencing
- Usaco 2.4Overfencing(BFS)
- USACO 2.4 Overfencing (maze1)
- USACO--2.4Overfencing
- USACO 2.4 Overfencing (BFS)
- usaco-Overfencing
- usaco overfencing
- usaco Overfencing
- USACO:Overfencing
- USACO-Overfencing
- USACO Overfencing
- USACO-Overfencing
- USACO section 2.4 Overfencing(dfs+bfs)
- USACO-Section 2.4 Overfencing(BFS)
- 【USACO题库】2.4.2 Overfencing穿越栅栏
- USACO 2.1 Overfencing 题解
- 【搜索】【USACO】Overfencing
- USACO:Overfencing解题报告
- 用NoWEB进行文学编程
- hadoop Secondary NameNode作用
- Python入门
- 已经在 LIBCMTD.lib(dbgdel.obj) 中定义 解决
- Git操作之 忽略文件
- USACO--2.4Overfencing
- python 算法实现 - 最小堆
- java线程同步
- 解决fragment+viewpager+ WebView 输入框无法输入英文数字问题
- hadoop 透明加密 kms transparent
- Eclipse使用心得
- cannot open git-upload-pack
- java自学笔记————字符编码原理,以及开发中常见的问题的解决方法:
- LZW数据压缩算法的原理分析