烦人的幻灯片问题(类拓扑排序)

问题描述

李教授将于今天下午作一次非常重要的演讲。不幸的是他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在一起。因此,演讲之前他不得不去整理这些幻灯片。做为一个讲求效率的学者,他希望尽可能简单地完成它。教授这次演讲一共要用n张幻灯片(n≤26),这n张幻灯片按照演讲要使用的顺序已经用数字1,2,…,n在上面编了号。因为幻灯片是透明的,所以我们用大写字母A,B,C,…再次把幻灯片依次编号。你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是唯一的;若是出现多种对应的情况或是某些数字编号和字母编号对应不起来,我们就称对应是无法实现的。

输入文件(slides.in)

文件的第1行只有一个整数n,表示有n张幻灯片,接下来的n行每行包括4个整数Xmin,Xmax,Ymin,Ymax(整数之间用空格分开)为幻灯片的坐标,这n张幻灯片按其在输入文件中出现的顺序从前到后依次编号为A,B,C,…,再接下来的n行依次为n个数字编号的坐标x,y,显然在幻灯片之外是不会有数字的。

输出文件(slides.out)

若是对应可以实现,则输出文件包括n行,每一行一个字母和一个数字,中间一个空格,各行以字母的升序排列;若是对应无法实现,在文件的第一行顶格输出None即可。

样例输入

4
6 22 10 20
4 18 6 16
8 20 2 18
10 24 4 8
9 15
19 17
11 7
21 11

样例输出

A 4
B 1
C 2
D 3

#include<iostream>
#include<vector>

using namespace std;

int xmin[100],xmax[100],ymin[100],ymax[100];//记录每个幻灯片的坐标 
int xx[100],yy[100];//记录每个数字的坐标 
int pd[100];//第i个数字被pd[i]个幻灯片指向 
int ans[100];//第i个幻灯片指向第ans[i]个幻灯片 
int n;//n个幻灯片和n个数字 
vector<int> map[100];//向量容器建图 

int main(){
    cin>>n;
    for(int i=1;i<=n;i++) pd[i]=0;//初始化pd数组 
    for(int i=1;i<=n;i++)
      cin>>xmin[i]>>xmax[i]>>ymin[i]>>ymax[i];//输入每个幻灯片的坐标 
    for(int i=1;i<=n;i++)
      cin>>xx[i]>>yy[i];//输入每个数字的坐标 
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        if(xmin[i]<=xx[j]&&xmax[i]>=xx[j]&&ymin[i]<=yy[j]&&ymax[i]>=yy[j]){ 
          map[i].push_back(j);//如果第j个字母在第i个幻灯片内,则i->j 
          pd[j]++;//记录第i个数字被几个幻灯片指向  
        }  
    bool t=true;//t=true表示有解 
    int tot=0;//表示已有tot个幻灯片被确认对应数字 
    while(t==true||tot<n){
        t=false;//如果无法进一步确认,则t返回到while的值为true 
        for(int i=1;i<=n;i++)
          if(pd[i]==1){//找被唯一幻灯片指向的数字 
            for(int x=1;x<=n;x++)
              for(int y=0;y<map[x].size();y++){
                if(map[x][y]==i){//x为所求的幻灯片的标号 
                    for(int j=0;j<map[x].size();j++)
                      pd[map[x][j]]--;//x指向的所有数字的被指向数-1
                    map[x].clear();//相当于删除x这个点
                    t=true;//当前循环中进一步确认了一个幻灯片的数字 
                    tot++;//又有一个幻灯片被确认 
                    ans[x]=i;//x幻灯片->i数字 
                }
              }
          }
    }
    if(tot!=n) cout<<"None"<<endl;
      else 
        for(int i=1;i<=n;i++){
            char ch;
            ch=i+64;
            cout<<ch<<" "<<ans[i]<<endl;
        }//输出 
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,289评论 0 9
  • TCP/IP协议 TCP/IP 是一个协议族,也是按照层次划分。共四层:应用层,传输层,互连网络层,网络接口层。O...
    lxfeng阅读 332评论 0 0
  • 对神的认识: 神的意念高过我们的意念,诗人在第1节中诉求耶和华不要袖手旁观,1到11节中一直在形容自己的处境和恶人...
    UncleTea阅读 3,296评论 0 0
  • 骑天大胜 焦点少年班坚持分享第237天 2018.3.19 星期一
    骑天大胜阅读 53评论 0 0
  • 伤害这个动作,是双方的,不可能是单方面的。这个动作造成的结果,表面上是伤害和被伤害。这是冰山之上。那冰山之下是什么...
    桃子在为77页的味道努力阅读 256评论 0 0