zoukankan      html  css  js  c++  java
  • 洛谷1605 迷宫 解题报告

    洛谷1605 迷宫

    本题地址: http://www.luogu.org/problem/show?pid=1605

    题目背景

    迷宫 【问题描述】 给定一个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

    题解

    深搜DFS

    纯回溯题。

    先把障碍标记好,然后从起点开始,往下DFS,当遇到障碍或走到边界时,返回上一层,继续往另一个方向走。

    当到达终点时,将方案数+1,继续过程,直到结束。

    PS:

    DFS就是这样一种走不通就掉头的搜索模式。虽然比较耗时,但在缺乏有效方法是,DFS也不失为一种选择。

    搜索也是一种很万能的解题方法,好多题都可以用它来解决(虽然不一定是最优方案)。

    下面附上代码。

    代码

    1. program d1;    
    2. var    
    3. a,d:array[1..1000,1..1000] of longint;    
    4. b,c:array[1..4] of longint;    
    5. n,m,l,p,x,y,f,k,i:longint;    
    6. procedure sou(x,y:longint);           //深搜    
    7. var    
    8. i:longint;    
    9. begin    
    10. if a[x,y]=then begin     
    11.     f:=f+1;    
    12.     exit;    
    13. end;    
    14. for i:=to do    
    15.     if (x+b[i]>0) and (x+b[i]<=n) and (y+c[i]>0) and (y+c[i]<=m) and (a[x+b[i],y+c[i]]<>2) and (d[x+b[i],y+c[i]]<>1)then begin    
    16.         d[x+b[i],y+c[i]]:=1;    
    17.     sou(x+b[i],y+c[i]);    
    18.         d[x+b[i],y+c[i]]:=0;    
    19.     end;    
    20. end;    
    21. begin    
    22. readln(n,m,k);    
    23. readln(x,y,l,p);    
    24. a[l,p]:=1;    
    25. for i:=to k do    
    26.     begin    
    27.     read(l,p);    
    28. a[l,p]:=2;    
    29. end;    
    30. b[1]:=1;    
    31. c[1]:=0;    
    32. b[2]:=0;    
    33. c[2]:=1;    
    34. b[3]:=-1;    
    35. c[3]:=0;    
    36. b[4]:=0;    
    37. c[4]:=-1;   //方位    
    38. d[x,y]:=1;   //初始化    
    39. sou(x,y);    
    40. write(f);    
    41. end.    

    (本文系笔者原创,未经允许不得转载)

  • 相关阅读:
    mq/mysql/redis/nginx常见服务&工具安装
    中断——中断描述符表的定义和初始化(二) (基于3.16-rc4)
    中断——中断描述符表的定义和初始化(一) (基于3.16-rc4)
    linux内核中与进程相关的数据结构(基于linux3.16-rc4)
    内核链表的应用
    ubuntu下做柯老师lab19-lab20实验问题总结
    在ns2.35中添加myevalvid框架
    在ns2.35下完成柯老师lab18实验
    windows编程socket问题
    如何高效利用GitHub
  • 原文地址:https://www.cnblogs.com/yzm10/p/4751983.html
Copyright © 2011-2022 走看看