zoukankan      html  css  js  c++  java
  • atcoder168D题

    总体分析:关于atcoder168D题的分析,主要是考虑不同结点的深度,并在考虑最浅的深度后再遇到此便不再考虑。

    同时用队列数组来保证所有结点的呈现出树状图所有结点的遍历。

    其三,用到了realloc函数来实现内存的解放,解决了静态存储占用大量空间的问题。

    此外,用到了指针数组指向与该结点相连的各个结点集合。

     

    在此,C语言代码奉上。还有题目的链接     https://atcoder.jp/contests/abc168/tasks/abc168_d

    • #include<stdio.h>
      #include<stdlib.h>
      #define size 100001
      int*pass[size];//链接任意2个room的集合 注意是指针数组,所以之后用到了指针数组的数组形式 如 pass[a][pass_s[a]]
      int deep[size];//这里本来理解错了,以为结果要输出的是深度,结果是要输出与该房间连接的房间号,详见题目
      // SO,这里deep应该要理解为与x号房间相连的上一层房间,记作deep[x]
      int pass_s[size];//对于每个room的路径数量统计
      int qu[size];//在后面存放结点用的队列数组
      int N,M;
      void set()
      {
          int a,b;
          //完成输入和初始化
          for(int j=0;j<N;j++){
             deep[j]=-1;
             pass_s[j]=0; 
          }
          deep[0]=0;
          for(int i=0;i<M;i++){
              scanf("%d %d",&a,&b);
              a--;b--;
              pass[a]=(int*)realloc(pass[a],sizeof(int)*(pass_s[a]+1));
              pass[a][pass_s[a]]=b;
              pass_s[a]++;
               pass[b]=(int*)realloc(pass[b],sizeof(int)*(pass_s[b]+1));
              pass[b][pass_s[b]]=a;
              pass_s[b]++;
          }
      }
      //完成计算
      void sys()
      {
          int point=0,tar=0,nm=0;
          while(1){
              for(int i=0;i<pass_s[tar];i++){
                   if(deep[pass[tar][i]]!=-1)continue;//只记录对于某一房间第一个上层房间,其他跳过
                   deep[pass[tar][i]]=tar+1;//指向房间号的deep为当前房间号+1即为题设房间号(因为预先减了1要再加回来)//deep[pass[tar][i]]=deep[tar]+1;这是计算深度用的
                  qu[nm]=pass[tar][i];
                  nm++;//利用队列实现类似BFS搜索,存储各个room
              }
              if(nm==point) break;
              tar=qu[point];
              point++;
          }

      }
      int main(){
          scanf("%d %d",&N,&M);
          set();
          sys();
          printf("Yes ");
          for(int i=1;i<N;i++){
           printf("%d ",deep[i]);
          }
          return 0;
      }

    就是这样子了,详见对代码的注释

    阳菜2

    愿你一路晴天

    天气之子

    加油吧

  • 相关阅读:
    laravel 安装完成后安装 vendor 目录
    requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement
    查看laravel版本
    git update-index --assume-unchanged
    Git 取消跟踪已版本控制的文件(亲测可行)
    git把某个文件去除版本控制
    git如何移除某文件夹的版本控制
    git如何移除某文件的版本控制
    git 教程
    Git branch && Git checkout常见用法
  • 原文地址:https://www.cnblogs.com/cryforbrightfuture/p/12920172.html
Copyright © 2011-2022 走看看