题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2449&cid=1181
目前dfs 里的递归还是不很懂,AC代码如下:
1 #include<stdio.h> 2 #include<string.h> 3 int map[10][10],vis[10][10]; 4 int ans; 5 int m,n; 6 void dfs(int i,int j) 7 { 8 if(vis[i][j]||map[i][j]) return; 9 10 if(i==n&&j==m) 11 { 12 ans++; 13 return; 14 } 15 16 vis[i][j]=1; 17 dfs(i-1,j); dfs(i,j-1); 18 dfs(i+1,j); dfs(i,j+1); 19 20 vis[i][j]=0; 21 }; 22 int main() 23 { 24 int t,i,j,a; 25 scanf("%d",&t); 26 while(t--) 27 { 28 ans=0; 29 memset(vis,0,sizeof(vis)); 30 scanf("%d%d",&n,&m); 31 for(i=0; i<=n+1; i++) 32 for(j=0; j<=m+1; j++) 33 map[i][j]=1; 34 for(i=1; i<=n; i++) 35 for(j=1; j<=m; j++) 36 { 37 scanf("%d",&a); 38 if(a==0) 39 map[i][j]=0; 40 } 41 dfs(1,1); 42 printf("%d\n",ans); 43 } 44 }