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;
}