1 #include<stdio.h>
2 #include<string.h>
3
4 int map[10][10],sum,n,m,vis[10][10];
5
6 void seek(int mbn,int mbm)
7 {
8 int jn[] = {0,0,-1,1};
9 int jm[] = {-1,1,0,0};
10 int i,tn,tm;
11 for(i = 0;i < 4; i++)
12 {
13 tn = mbn+jn[i];
14 tm = mbm+jm[i];
15 if(tn == n && tm == m) sum++;
16 else if(tn >= 1 && tn <= n && tm >= 1 && tm <= m)
17 {
18 if(map[tn][tm] != -1 && !vis[tn][tm])
19 {
20 vis[tn][tm] = 1; //标记此条路中已走过的
21 seek(tn,tm);
22 }
23 }
24 }
25 vis[mbn][mbm] = 0; //去掉标记
26 }
27
28 int main()
29 {
30 int js,i,j;
31 scanf("%d",&js);
32 while(js--)
33 {
34 scanf("%d %d",&n,&m);
35 memset(map,-1,sizeof(map));
36 memset(vis, 0,sizeof(vis));
37 for(i = 1;i <= n; i++)
38 for(j = 1;j <= m; j++)
39 {
40 scanf("%d",&map[i][j]);
41 if(map[i][j]) map[i][j] = -1;
42 }
43 sum = 0;
44 vis[1][1] = 1;
45 seek(1,1);
46 printf("%d\n",sum);
47 }
48 return 0;
49 }