码迷,mamicode.com
首页 > 其他好文 > 详细

1605--luogu(深搜dfs)

时间:2019-01-18 12:12:46      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   时间   描述   通过   深搜dfs   using   cst   起点   问题   

 

据说

这是一道很水的题

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;
}

1605--luogu(深搜dfs)

标签:style   时间   描述   通过   深搜dfs   using   cst   起点   问题   

原文地址:https://www.cnblogs.com/darlingroot/p/10286607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!