您的位置:首页 > 其它

bzoj3406 [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵

2017-12-10 09:49 549 查看
题目

BFS经典例题吧。

从起点开始入队,就好了。

值得注意的是,可以向八个方向拓展。。

#include<cstdio>
struct sb{
int x,y,day
};
const int dx[8]={1,0,-1,0,1,-1,-1,1};
const int dy[8]={0,1,0,-1,1,-1,1,-1};
int n,m,mx,my;
int r,c;
sb hs[20000];
char ch[200][200];
int init() {
scanf("%d%d%d%d\n", &m, &n, &mx, &my);
r = n - my;
c = mx-1;
int i;
for (i=0;i<n;i++) {
gets(ch[i]);
}
}
void bfs (){
int tail=1,head=0;
int i;
hs[1].x = r, hs[1].y = c, hs[1].day = 0; ch[r][c]='#';
do {
head++;
for (i=0;i<8;i++) {
int cx = hs[head].x + dx[i], cy = hs[head].y + dy[i];
if (cx >=0 && cy >=0 && cx < n && cy < m && ch[cx][cy] =='.') {
tail++;
hs[tail].x = cx;
hs[tail].y = cy;
hs[tail].day = hs[head].day+1;
ch[cx][cy] = '#';
}
}
} while (head<tail);
printf("%d\n", hs[tail].day);
}
int main()
{
freopen("in.txt","r",stdin);
init();
bfs();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: