|
xn][maxn]; int door[maxn][maxn]; bool isok(int x,int y) { if (x>=0&&x<=N&&y>=0&&y<=M) return true; return false; } void dfs(int x,int y) { mp[x][y]=2; for (int i=0;i<4;i++) { int dx=x+dir[i][0]; int dy=y+dir[i][1]; if (isok(dx,dy)&&mp[dx][dy]==0&&!door[dx][dy]) dfs(dx,dy); } } int bfs() { Node st,now; memset(vis,false,sizeof(vis)); st.x=sx,st.y=sy,st.step=0; vis[sx][sy]=true; priority_queue
Q; Q.push(st); while (!Q.empty()) { st=Q.top();Q.pop(); if (mp[st.x][st.y]==2) return st.step; for (int i=0;i<4;i++) { now.x=st.x+dir[i][0]; now.y=st.y+dir[i][1]; if (isok(now.x,now.y)&&mp[now.x][now.y]!=1&&!vis[now.x][now.y]) { now.step=st.step; if (door[now.x][now.y]) now.step++; vis[now.x][now.y]=true; Q.push(now); } } } return -1; } int main() { //#ifndef ONLINE_JUDGE // freopen(C:/Users/lyf/Desktop/IN.txt,r,stdin); //#endif int i,j,x,y,d,l; double xx,yy; while (scanf(%d%d,&m,&n)) { if (n==-1&&m==-1) break; memset(mp,0,sizeof(vis)); memset(door,0,sizeof(door)); N=M=0; for (i=0;i
>xx>>yy; if (n==0 && m==0) printf (0 ); else if (xx<0||yy<0||xx>199||yy>199) printf (0 ); else { sx=((int)xx)*2+1; sy=((int)yy)*2+1; dfs(1,1); printf(%d ,bfs()); } } return 0; }
?
|