#include<stdio.h> #include<string.h> #include<algorithm> #include<stack> using namespace std; int a[5][5],b[5][5]; int di[4][2]={0,1,0,-1,1,0,-1,0}; void bfs(int x,int y) { int tx=x,ty=y,i; if(a[x][y]==0) { a[x][y]=1; for(i=0;i<4;i++) { tx+=di[i][0]; ty+=di[i][1]; if(a[tx][ty]==0&&tx>=0&&ty>=0&&tx<=4&&ty<=4) { b[tx][ty]=min(b[tx][ty],b[x][y]+1); } } for(i=0;i<4;i++) { tx+=di[i][0]; ty+=di[i][1]; if(a[tx][ty]==0&&tx>=0&&ty>=0&&tx<=4&&ty<=4) bfs(tx,ty); } } } int main() { stack<int>s1,s2; int i,j,ti,tj,k; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); for(i=0;i<5;i++) for(j=0;j<5;j++) b[i][j]=999; b[0][0]=1; bfs(0,0); i=4;j=4; s1.push(4); s2.push(4); while(1) { if(j==0&&i==0) break; for(k=0;k<4;k++) { ti=i+di[k][0]; tj=j+di[k][1]; if(b[i][j]==b[ti][tj]+1 && ti>=0 && tj>=0 && ti<=4 && tj<=4) { s1.push(ti); s2.push(tj); i=ti;j=tj; // printf("%d %d\n",i,j); break; } } } while(s1.size()!=0) { i=s1.top();s1.pop(); j=s2.top();s2.pop(); printf("(%d, %d)\n",i,j); } return 0; }
时间: 2024-10-24 15:21:31