POJ 3984
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 using namespace std; 8 int a[10][10],vis[10][10]; 9 int dis[100][2],co[100][2],dir[4][2]={-1,0,1,0,0,1,0,-1},mi; 10 void dfs(int x,int y,int step) 11 { 12 int xx,yy; 13 if(x==4&&y==4) 14 { 15 if(step<mi) 16 { 17 mi=step; 18 for(int i=0;i<=step;i++) 19 { 20 co[i][0]=dis[i][0]; 21 co[i][1]=dis[i][1]; 22 } 23 } 24 return; 25 } 26 for(int i=0;i<4;i++) 27 { 28 xx=x+dir[i][0]; 29 yy=y+dir[i][1]; 30 if(xx>=0&&yy>=0&&xx<5&&yy<5&&a[xx][yy]==0&&vis[xx][yy]==0) 31 { 32 vis[xx][yy]=1; 33 dis[step+1][0]=xx; 34 dis[step+1][1]=yy; 35 dfs(xx,yy,step+1); 36 vis[xx][yy]=0; 37 } 38 } 39 } 40 int main(int argc, char *argv[]) 41 { 42 for(int i=0;i<5;i++) 43 for(int j=0;j<5;j++) 44 scanf("%d",&a[i][j]); 45 memset(vis,0,sizeof(vis)); 46 mi=0x3f; 47 dis[0][0]=0;dis[0][1]=0; 48 vis[0][0]=1; 49 dfs(0,0,0); 50 for(int i=0;i<=mi;i++) 51 { 52 printf("(%d, %d)\n",co[i][0],co[i][1]); 53 } 54 return 0; 55 }