#include<stdlib.h>
#include<stdio.h>
int map[6][6];//地图
int temp[6][6];//标记
int N,M,T,sx,sy,fx,fy;//行,列,障碍数目,起始位置,结束位置
int sum=0;//路线的个数
int dx[4]={0,1,0,-1};//移动的四个方向
int dy[4]={1,0,-1,0};
int check(int x,int y){
if(x>=1&&x<=N&&y>=1&&y<=M)return 1;
else return 0;
}//检查是否出界
void dfs(int x,int y){
if(x==fx&&y==fy){
sum++;
return;
}
else{
for(int i=0;i<4;i++){
int xx=x+dx[i],yy=y+dy[i];
if(check(xx,yy)&&temp[xx][yy]&&map[xx][yy]){
temp[x][y]=0;
dfs(xx,yy);
temp[x][y]=1;//回溯
}
}
}
}
int main(){
scanf("%d%d%d",&N,&M,&T);
scanf("%d%d%d%d",&sx,&sy,&fx,&fy);
for(int i=0;i<=N;i++){
for(int j=0;j<=M;j++){
temp[i][j]=1;
map[i][j]=1;
}
}
//初始化完成
for(int i=0;i<T;i++){
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=0;
}
//障碍物输入完成
dfs(sx,sy);
printf("%d",sum);
}
int search(int t)
{
if(满足输出条件)
{
输出解;
}
else
{
for(int i=1;i<=尝试方法数;i++)
if(满足进一步搜索条件)
{
为进一步搜索所需要的状态打上标记;
search(t+1);
恢复到打标记前的状态;//也就是说的{回溯一步}
}
}
}
题目链接