怕黑的小强

原创 2016年08月29日 09:11:09

【题目描述】
有一个N*N的房间,房间内有一些开关可以打开另外一些房间的灯。小强可以走向相邻的四个房间,但是小强非常怕黑,只有相邻的房间的灯是打开的,才敢进入。小强一开始身处[1,1]房间 ,问小强最多可以进入多少个房间。
【输入格式】
第一行,两个整数N和M
以下M行,每行四个整数x、y、a、b,表示在房间[x,y]可以打开房间[a,b]的灯
【输出格式】
最多可以进入多少个房间
【样例输入】
3 6
1 1 1 2
2 1 2 2
1 1 1 3
2 3 3 1
1 3 1 2
1 3 2 1
【样例输出】
5
【数据范围】
1≤N≤100
1≤M≤20000
【分析】
搜索,每次向四个方向扩展直到无法更新答案。

const
  dx:array[1..4]of -1..1=(-1,1,0,0);
    dy:array[1..4]of -1..1=(0,0,-1,1);
var
  a,b,c,d:array[0..20001]of longint;
    i,j,n,m,ans:longint;
    flag:boolean;
    x,y:array[0..101,0..101]of 0..1;
procedure swap(var x,y:longint);
var tmp:longint;
begin
  tmp:=x;x:=y;y:=tmp;
end;
procedure qsort(l,r:longint);
var
  i,j,mid:longint;
begin
  i:=l;j:=r;
    mid:=(l+r) div 2;
    repeat
        while (a[i]<a[mid]) or ((a[i]=a[mid])and(b[i]<b[mid])) or ((a[i]=a[mid])and(b[i]=b[mid])and(c[i]<c[mid])) or ((a[i]=a[mid])and(b[i]=b[mid])and(c[i]=c[mid])and(d[i]<d[mid])) do inc(i);
        while (a[j]>a[mid]) or ((a[j]=a[mid])and(b[j]>b[mid])) or ((a[j]=a[mid])and(b[j]=b[mid])and(c[j]>c[mid])) or ((a[j]=a[mid])and(b[j]=b[mid])and(c[j]=c[mid])and(d[j]>d[mid])) do dec(j);
        if i<=j then begin
            swap(a[i],a[j]);swap(b[i],b[j]);swap(c[i],c[j]);swap(d[i],d[j]);
            inc(i);dec(j);
        end;
    until i>j;
  if l<j then qsort(l,j);
    if i<r then qsort(i,r);
end;
procedure search(tx,ty:longint);
var
  i,cx,cy:longint;
begin
  y[tx,ty]:=1;
    for i:=1 to 4 do begin
      cx:=tx+dx[i]; cy:=ty+dy[i];
      if (y[cx,cy]=0)and(x[cx,cy]=1)and(cx>=1)and(cx<=n)and(cy>=1)and(cy<=n) then search(cx,cy);
    end;
end;
begin
  read(n,m);
    for i:=1 to m do read(a[i],b[i],c[i],d[i]);
    qsort(1,m);
    x[1,1]:=1;
    y[1,1]:=1;
    flag:=true;
    while flag do begin
      flag:=false;
        for i:=1 to m do begin
          if (x[a[i],b[i]]=1)and(y[a[i],b[i]]=1) then begin
              if x[c[i],d[i]]=0 then flag:=true;
                x[c[i],d[i]]:=1;
            end;
            if (x[a[i],b[i]]=1)and(y[a[i],b[i]]=1) then
              for j:=1 to 4 do y[a[i]+dx[j],b[i]+dy[j]]:=1;
            if (x[c[i],d[i]]=1)and(y[c[i],d[i]]=1) then
              for j:=1 to 4 do y[c[i]+dx[j],d[i]+dy[j]]:=1;
        end;
    end;
    fillchar(y,sizeof(y),0);
    search(1,1);
    ans:=0;
    for i:=1 to n do
      for j:=1 to n do
          if y[i,j]=1 then inc(ans);
    write(ans);
end.
版权声明:本文原创,可以转载,但需附上原文链接,否则你的生命将会-1s!!!! 举报

相关文章推荐

怕黑的小强

【题目描述】 有一个N*N的房间,房间内有一些开关可以打开另外一些房间的灯。小强可以走向相邻的四个房间,但是小强非常怕黑,只有相邻的房间的灯是打开的,才敢进入。小强一开始身处[1,1]房间 ,问小强...

华为机试题:可怕的阶乘

题目标题: · 计算阶乘n!是一件可怕的事情,因为当n并不是很大时,n!将是一个很大的值。例如13! = 6227020800,已经超过了我们常用的unsigned int类型的取值范围。请设计一个...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

武装我的“超强小黑”Thinkpad T400

公司发的有笔记本,无论公司还是家里也都有台式机,可是我还是最钟意我的“超强小黑”Thinkpad T400,在家里我一直用它,都很少碰台式机了。 周末我上中关村转了一圈,顺便买了点东西,把小黑武装了...

小强的Linux

1036: 小强的Linux Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 14  Solved: 8 Description 在Linux操作...

小黑小波比.极客学院.android自学笔记

1_ 第1阶段 | 环境搭建

小黑小波比.app服务端常见问题6

1_打印错误信息

小黑小波比.nodejs功能测试

zmzp@zmzp1:~/data/s910$ node single --test Default Log Start... x86 don't support memwatch test> 可使...

小黑小波比.极客学院.HTML5学习笔记

HTML5的基础,本人是极客学院的极客!跟着视频写笔记。现在一起分享给大家,以后还会持续更新! 以下是所学到的学习内容。 第1阶段HTML开发前准备 第2阶段HTML5基础

自学之路——七年之痒 ----------BY小生我怕怕前辈

呵呵!都凌晨了,一夜没睡!看了一夜小甲鱼的视频!突然内心有一些话,想和大家分享下,都是自己走过的路,自己的心理话,希望能给予大家一些启示!          《七年之痒——之引子前序》  ...

春运首日38万人乘火车离京 有人提前12小时候车

春运首日,北京站客流量明显增多,一名女孩在人流中等待进站。 【今年春运大幕昨日正式开启。40天时间,全国将有超过36亿人次踏上旅程。春运第一天,国务院副总理马凯在北京市检查春运工作。北京铁路初步...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)