zoukankan      html  css  js  c++  java
  • 烦人的幻灯片(确实烦人啊)

    思路:这也是个类拓扑排序,给区间编号,然后有一个点在其范围,这个区间的入度就增加,每次遍历所有区间,然后挑出入度为1的区间,数组记录,因为他要求按区间顺序输出。

    #include <cstdio>
    #include <iostream>
    using namespace std;
    struct po{
        int x1;
        int y1;
        int x2;
        int y2;
        char c;
    }a[1000];
    struct pi{
        int x;
        int y;
    }b[1000];
    int r[1000]//r为入度数组,c[1000][1000]//出度数组,d[1000][1000]//区间包含的点数组,f[1000]//此点有没有输出的标记数组,sc1[10000]//这个是输出数组(看名字就能看的出来啊!);
    int main()
    {
        int n;
    
        scanf("%d",&n);
    
        for(int i=1;i<=n;i++)
         {
            scanf("%d%d%d%d",&a[i].x1,&a[i].x2,&a[i].y1,&a[i].y2);
         }
    
        for(int i=1;i<=n;i++)
         {
            scanf("%d%d",&b[i].x,&b[i].y);
            for(int j=1;j<=n;j++)
             if(b[i].x>=a[j].x1&&b[i].x<=a[j].x2&&b[i].y>=a[j].y1&&b[i].y<=a[j].y2)
              {
                r[j]++;
                c[i][++c[i][0]]=j;
                d[j][++d[j][0]]=i;
              } 
         }
    
         for(int k=1;k<=n;k++)
         {
            int x=0;
            int j;
            for(j=1;j<=n;j++)
             if(r[j]==1) {r[j]=1e7;x=j;break;}//遍历所有区间
            if(x==0) {printf("None");return 0;}//如果找不到,证明没有解
            for(j=1;j<=d[x][0];j++)
             if(f[d[x][j]]==0) {f[d[x][j]]=1;break;}//看这个区间覆盖的点哪个没有输出
            int y=d[x][j];
            for(j=1;j<=c[y][0];j++)//此点所在的区间入度减1
             r[c[y][j]]--;
            sc1[x]=y;
         }
    
        for(int i=1;i<=n;i++) 
         printf("%c %d
    ",i+'A'-1,sc1[i]);
         return 0;
    }
  • 相关阅读:
    使用序列化实现对象的拷贝
    SQL连接查询深度探险
    关于ArrayList和Vector区别
    list_arrayList三种遍历性能比较
    Java过滤器与SpringMVC拦截器之间的关系与区别
    遍历map 哪种方式更加高效。
    Http请求中Content-Type讲解以及在Spring MVC中的应用
    sql语句练习50题
    在js中初始化select数据
    java浮点数剖析
  • 原文地址:https://www.cnblogs.com/ht008/p/6819839.html
Copyright © 2011-2022 走看看