1605--luogu(深搜dfs)
据说
这是一道很水的题
emmm
好吧
是我过分水了
------------------------------------------------------------------------
题目背景
迷宫 【问题描述】
给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和
终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫
中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
输入样例 输出样例
【数据规模】
1≤N,M≤5
题目描述
输入输出格式
输入格式:
【输入】
第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点
坐标FX,FY。接下来T行,每行为障碍点的坐标。
输出格式:
【输出】
给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方
案总数。
输入输出样例
输入样例#1: 复制
2 2 1 1 1 2 2 1 2
输出样例#1: 复制
1
---------------------------------------------------------------------------
想不出来
上网上找的题解
方法是以前学过的矩阵
并没有用到bool的标记(虽然也用到了标记....但...不太一样)
与老师的想法有些出入
至于为什么有de了好长时间的bug
嗯...
自己设的变量有点多而且相像
写代码的时候又过分着急
出现了太多太多的细节错误....
希望自己下次可以细心一些
----------------------------------------------------------------------
#include<cstdio>
using namespace std;
int n,m,tot,sx,sy,ex,ey,mar[1000][1000],pot[1000][1000],x,y,sum = 0;
int xx[4]= {1,0,-1,0},yy[4]= {0,1,0,-1};
void fid(int a,int b)
{
if(a == ex && b == ey)
{
sum++;
return;
}
for(int i=0; i<=3; i++)
{
if(pot[a+xx[i]][b+yy[i]] == 0 && mar[a+xx[i]][b+yy[i]] == 0 && a+xx[i]>=1 && a+xx[i]<=n && b+yy[i]>=1 &&b+yy[i]<=m)
{
mar[a+xx[i]][b+yy[i]]=1;
fid(a+xx[i],b+yy[i]);
mar[a+xx[i]][b+yy[i]]=0;
}
}
return;
}
int main()
{
scanf("%d%d%d%d%d%d%d",&n,&m,&tot,&sx,&sy,&ex,&ey);
mar[sx][sy] = 1;
for(int i=1; i<=tot; i++)
{
scanf("%d%d",&x,&y);
pot[x][y]=1;
}
fid(sx,sy);
printf("%d",sum);
return 0;
}