fork download
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. //static int count=0;
  5.  
  6. void f(int a[][8],int n,int m,int x,int y,int z,int fx,int fy, int &count){
  7. if(x==fx && y==fy && z==(n*m-1) && a[x][y]==1) {count++; return;}
  8. /*
  9.   if( (x-1)>=0 && a[x-1][y]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0) zb++ ; f(b,n,m,x-1,y,zb,fx,fy,count);};
  10.   if( (x-2)>=0 && a[x-2][y]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0)zb++ ; f(b,n,m,x-2,y,zb,fx,fy,count);};
  11.   if( (x+1)<n && a[x+1][y]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0) zb++ ; f(b,n,m,x+1,y,zb,fx,fy,count);};
  12.   if( (x+2)<n && a[x+2][y]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0) zb++ ; f(b,n,m,x+2,y,zb,fx,fy,count);};
  13.   if( (y-1)>=0 && a[x][y-1]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0) zb++ ; f(b,n,m,x,y-1,zb,fx,fy,count);};
  14.   if( (y-2)>=0 && a[x][y-2]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0) zb++ ; f(b,n,m,x,y-2,zb,fx,fy,count);};
  15.   if( (y+1)<m && a[x][y+1]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0) zb++ ; f(b,n,m,x,y+1,zb,fx,fy,count);};
  16.   if( (y+2)<m && a[x][y+2]!=0 ) { int zb=z; int b[8][8]=a; if(--b[x][y]==0) zb++ ; f(b,n,m,x,y+2,zb,fx,fy,count);};
  17.   */
  18. int b[n][8];
  19. for(int i=0;i<n;i++){
  20. for(int j=0;j<m;j++)
  21. b[i][j]=a[i][j];
  22. }
  23. b[x][y]--;
  24. if(b[x][y]==0) z++ ;
  25. if( (x-1)>=0){if( a[x-1][y]!=0 ) f(b,n,m,x-1,y,z,fx,fy,count);
  26. if( (x-2)>=0) {if (a[x-2][y]!=0 ) f(b,n,m,x-2,y,z,fx,fy,count);}; };
  27. if( (x+1)<n ) { if( a[x+1][y]!=0 ) f(b,n,m,x+1,y,z,fx,fy,count);
  28. if( (x+2)<n ) { if( a[x+2][y]!=0 ) f(b,n,m,x+2,y,z,fx,fy,count);}; };
  29. if( (y-1)>=0 ) {if( a[x][y-1]!=0 ) f(b,n,m,x,y-1,z,fx,fy,count);
  30. if( (y-2)>=0 ) { if(a[x][y-2]!=0 ) f(b,n,m,x,y-2,z,fx,fy,count);}; };
  31. if( (y+1)<m) {if(a[x][y+1]!=0 ) f(b,n,m,x,y+1,z,fx,fy,count);
  32. if( (y+2)<m) {if( a[x][y+2]!=0 ) f(b,n,m,x,y+2,z,fx,fy,count);}; };
  33. }
  34.  
  35. int main()
  36. {
  37. int n,m,sx,sy,fx,fy,z=0,count=0,t;
  38. cin>>t>>n>>m>>sx>>sy>>fx>>fy;
  39. while(t){
  40. int a[n][8];
  41. for(int i=0;i<n;i++){
  42. for(int j=0;j<m;j++)
  43. {cin>>a[i][j]; if(a[i][j]==0) z=z+1;}
  44. }
  45. f(a,n,m,sx-1,sy-1,z,fx-1,fy-1,count);
  46. cout<<count<<endl;
  47. t--;
  48. }
  49.  
  50. return 0;
  51. }
  52.  
  53.  
Success #stdin #stdout 0s 3344KB
stdin
1 3 3 3 1 3 1 1 0 0 3 1 1 3 1 1 
stdout
152