1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 int a[21][3],b[21],c[21],n,cas; 7 8 void DFS(int x,int step) 9 { 10 int i,j,t; 11 for(i=0;i<3;i++) 12 { 13 t=a[x][i]; 14 if(t==n && step==20) 15 { 16 printf("%d: ",++cas); 17 for(j=1;j<=21;j++) 18 printf(" %d",c[j]); 19 printf("\n"); 20 } 21 else 22 if(b[t]==0) 23 { 24 b[t]=1; 25 c[step+1]=t; 26 DFS(t,step+1); 27 b[t]=0; 28 } 29 } 30 return; 31 } 32 33 int main() 34 { 35 int i; 36 for(i=1;i<=20;i++) 37 scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]); 38 while(scanf("%d",&n),n) 39 { 40 cas=0; 41 memset(b,0,sizeof(b)); 42 b[n]=1; 43 c[1]=c[21]=n; 44 DFS(n,1); 45 } 46 return 0; 47 }
//memory:228KB time:0ms
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 using namespace std; 6 7 int m,n,number,add[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 8 char a[40][40]; 9 10 void DFS(int x,int y,int step) 11 { 12 int i,hx,hy; 13 for(i=0;i<4;i++) 14 { 15 hx=x+add[i][0]; 16 hy=y+add[i][1]; 17 if(a[hx][hy]=='.') 18 { 19 a[hx][hy]='#'; 20 number++; 21 DFS(hx,hy,step+1); 22 } 23 } 24 } 25 26 int main() 27 { 28 int i,j; 29 while(scanf("%d%d",&m,&n),m,n) 30 { 31 memset(a,0,sizeof(a)); 32 for(i=0;i<n;i++) 33 scanf("%s",a[i]); 34 for(i=0;i<n;i++) 35 for(j=0;j<m;j++) 36 if(a[i][j]=='@') 37 { 38 number=1; 39 DFS(i,j,0); 40 break; 41 } 42 printf("%d\n",number); 43 } 44 return 0; 45 }
//memory:232KB time:15ms
WA一次是地图开小了一点~~~
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 7 char a[10][10]; 8 int m,n,time,temp,x1,x2,y1,y2,minn,add[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; 9 bool ID; 10 11 void DFS(int x,int y,int step) 12 { 13 int i,hx,hy; 14 if(x<=0 || y<=0 || x>m || y>n || step>time) 15 return; 16 if(x==x2 && y==y2 && step==time) 17 { 18 ID=true; 19 return; 20 } 21 if(ID) return; 22 temp=time-step-abs(x-x2)-abs(y-y2); 23 if(temp<0 || temp&1) return; 24 for(i=0;i<4;i++) 25 { 26 hx=x+add[i][0]; 27 hy=y+add[i][1]; 28 if(a[hx][hy]!='X') 29 { 30 a[hx][hy]='X'; 31 DFS(hx,hy,step+1); 32 a[hx][hy]='.'; 33 } 34 } 35 return; 36 } 37 38 int main() 39 { 40 int i,j,k; 41 while(scanf("%d%d%d",&m,&n,&time),m,n,time) 42 { 43 // memset(a,0,sizeof(a)); 44 ID=false; 45 k=0; 46 for(i=1;i<=m;i++) 47 for(j=1;j<=n;j++) 48 { 49 cin>>a[i][j]; 50 if(a[i][j]=='S') 51 { 52 x1=i; 53 y1=j; 54 } 55 if(a[i][j]=='D') 56 { 57 x2=i; 58 y2=j; 59 } 60 if(a[i][j]=='X') 61 ++k; 62 } 63 if(m*n-k<=time) 64 { 65 printf("NO\n"); 66 continue; 67 } 68 a[x1][y1]='X'; 69 DFS(x1,y1,0); 70 if(ID) printf("YES\n"); 71 else printf("NO\n"); 72 } 73 return 0; 74 }