http://tyvj.cn/p/1030
直接BFS就行,注意X,Y
参考代码:
#include<cstdio>
struct sb {
int x;
int y;
int day;
};
const int dx[8] = {1,0,-1, 0,1,-1,-1, 1},
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] = '#';
/* printf("\n");
for (int o=0;o<n;o++) {
puts(ch[o]);}printf("\n");
printf("%d %d", hs[head].x,hs[head].y);*/
}
}
} while (head<tail);
printf("%d\n", hs[tail].day);
}
int main() {
init();
bfs();
return 0;
}