zoukankan      html  css  js  c++  java
  • 上学路线 (Standard IO)

    题意/Description:

           你所在城市的街道好像一个棋盘,有a条南北方向的街道,和b条东西方向的街道。
           南北方向的a条街道从西到东依次编号为1到a,而东西方向的b条街道从南到北依次编号为1到b,南北方向的街道i和东西方向的街道j的交点记为(I,j)。
           你住在(1,1)处,而学校在(a,b)处,你骑自行车去上学,自行车只能沿着街道走,而且为了缩短时间只允许沿着向东和北的方向行驶。
           现在有N个交叉路口在施工(X1,Y1)、(X2,Y2),,,(Xn,Yn),这些路口是不能通车的。
           问你上学一共有多少走法?

     

    读入/Input

           第一行包含两个整数a和b,并且满足1<=a,b<=16。
           第二行包含一个整数N,表示有N个路口在维修(1<=N<=40)
           接下来N行,每行两个整数X_i,Y_i,描述路口的位置。

    输出/Output

           输出一个整数表示从(1,1)到(a,b)的行车路线总数。

     

    题解/solution

           赤裸裸的搜索。

     

    代码/Code

    var
      n,m,ans:longint;
      a:array [0..20,0..20] of boolean;
      dx,dy:array [1..2] of longint;
    procedure init;
    var
      t,i,x,y:longint;
    begin
      fillchar(a,sizeof(a),true);
      readln(m,n);
      readln(t);
      for i:=1 to t do
        begin
          readln(y,x);
          a[n-x+1,y]:=false;
        end;
      ans:=0;
      dx[1]:=-1; dy[1]:=0;
      dx[2]:=0; dy[2]:=1;
    end;
    
    procedure main(x,y:longint);
    var
      i:longint;
    begin
      if (x<1) or (x>n) or (y<1) or (y>m) or (not a[x,y]) then exit;
      if (x=1) and (y=m) then
        begin
          inc(ans);
          exit;
        end;
      a[x,y]:=false;
      for i:=1 to 2 do
        main(x+dx[i],y+dy[i]);
      a[x,y]:=true;
    end;
    
    begin
      init;
      main(n,1);
      write(ans);
    end.



  • 相关阅读:
    内核并发管理---spin lock
    redhat samba安装配置
    内核系统调用接口分析
    kernel makefile
    你知道C#中的Lambda表达式的演化过程吗?
    农码一生博文索引
    那些年搞不懂的术语、概念:协变、逆变、不变体
    Asp.Net生命周期
    ASP.NET配置文件Web.config 详细解释
    加盐密码哈希:如何正确使用
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319632.html
Copyright © 2011-2022 走看看