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;
}
原文地址:https://www.cnblogs.com/darlingroot/p/10286607.html