【拓撲排序】煩人的幻燈片(slides)


1395:煩人的幻燈片(slides)


時間限制: 1000 ms         內存限制: 65536 KB
提交數: 753     通過數: 416 

【題目描述】

李教授將於今天下午作一次非常重要的演講。不幸的事他不是一個非常愛整潔的人,他把自己演講要用的幻燈片隨便堆在了一起。因此,演講之前他不得不去整理這些幻燈片。作為一個講求效率的學者,他希望盡可能簡單地完成它。教授這次演講一共要用n張幻燈片(n≤26),這n張幻燈片按照演講要使用的順序已經用數字1~n編了號。因為幻燈片是透明的,所以我們不能一下子看清每一個數字所對應的幻燈片。

現在我們用大寫字母A,B,C……再次把幻燈片依次編號。你的任務是編寫一個程序,把幻燈片的數字編號和字母編號對應起來,顯然這種對應應該是唯一的;若出現多種對應的情況或是某些數字編號和字母編號對應不起來,我們稱對應是無法實現的。

【輸入】

第一行只有一個整數n,表示有n張幻燈片,接下來的n行每行包括4個整數xmin,xmax,ymin,ymax(整數之間用空格分開)為幻燈片的坐標,這n張幻燈片按其在文件中出現的順序從前到后依次編號為A,B,C……,再接下來的n行依次為n個數字編號的坐標x,y,顯然在幻燈片之外是不會有數字的。

【輸出】

若是對應可以實現,輸出文件應該包括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


記錄每個數字對應幾個字母 每次找出度為1的數字入隊,進行拓撲排序.

#include<bits/stdc++.h>
using namespace std;
const int ll=50;
struct node {
    int xi,xa,yi,ya;
} qu[ll];
struct point {
    int x,y;
} po[ll];
int n,sum;
int du[ll],book[ll][ll],ans[ll];
void find(int x) {
    sum++;
    du[x]--;
    for(int i=1; i<=n; ++i) {
        if(book[x][i]) {
            ans[i]=x;
            book[x][i]=0;
            for(int j=1; j<=n; ++j) {
                if(book[j][i]) {
                    du[j]--;
                    book[j][i]=0;
                    if(du[j]==1) find(j);
                }
            }
            break;
        }
    }
    return ;
}
int main() {
    cin>>n;
    for(int i=1; i<=n; ++i) {
        cin>>qu[i].xi>>qu[i].xa>>qu[i].yi>>qu[i].ya ;
    }
    for(int i=1; i<=n; ++i) {
        cin>>po[i].x >>po[i].y;
        int cnt = 0;
        for(int j=1; j<=n; ++j) {
            if(po[i].x <=qu[j].xa&&po[i].x >=qu[j].xi&&po[i].y <=qu[j].ya &&po[i].y>=qu[j].yi) {
                book[i][j]=1;
                cnt++;
            }
        }
        du[i]=cnt;
    }
    for(int i=1; i<=n; ++i) {
        if(du[i]==1) {
            find(i);
        }
    }
    if(sum<n) {
        cout<<"None\n";
    } else {
        for(int i=1; i<=n; ++i) {
            cout<<char(i-1+'A')<<" "<<ans[i]<<endl;
        }
    }
    return 0;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM