这道题我是用DFS来做的
#include <stdio.h>
#include <string.h>
int mp[10][10];
int vis[10][10];
int chx[]={0,0,1,-1};
int chy[]={1,-1,0,0};
int num;
struct node
{
int x,y;
};
void dfs(int x,int y,int n,int m)
{
int i;
struct node tmp;
if(x<0||x>=n||y<0||y>=m) //边界条件
return ;
if(x==n-1&&y==m-1)
{
num++;
return;
}
for(i=0;i<4;i++) //四个方向
{
tmp.x=x+chx[i];
tmp.y=y+chy[i];
if(!vis[tmp.x][tmp.y]&&mp[tmp.x][tmp.y]==0)
{
vis[tmp.x][tmp.y]=1;
dfs(tmp.x,tmp.y,n,m);
vis[tmp.x][tmp.y]=0; //因为会重复走,所以要取消标记
}
}
}
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
num=0;
memset(vis,0,sizeof(vis)); //初始化
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&mp[i][j]);
vis[0][0]=1;
dfs(0,0,n,m);
printf("%d\n",num);
}
return 0;
}