類拓撲排序

2021-08-14 11:04:54 字數 1774 閱讀 1346

一道題。

叫做 煩人的幻燈片:

【題目描述】

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

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

【輸入】

第一行只有乙個整數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

#include

#include

using

namespace

std;

const

int maxn=1000;

int outd[maxn],ans[maxn];

int n;

bool a[maxn][maxn];

stack

st;

struct slide s[maxn];//結構體 幻燈片

struct letter l[maxn];//結構體 數字

bool judge(int i,int j)

//判斷數字與幻燈片能否對應

void print()

}for (i=1; i<=n; i++)

if (outd[i]==1)//尋找出度為一的點

outd[i]=0;//注意這裡要修改出度 防止以後再次訪問這個點

}while (!st.empty())//當棧不為空時

//刪掉與該幻燈片相連的所有邊

for (i=1; i<=n; i++) //再看有沒有出度為1的幻燈片數字

if (outd[i]==1)

outd[i]=0;

}//尋找出度為一的點 同上

}if (num==n) print();

else

cout

<<"none"

}

python 拓撲排序 Python 拓撲排序

python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...

python 排序 拓撲排序

在電腦科學領域中,有向圖的拓撲排序是其頂點的先行排序,對於每個從頂點u到頂點v的有向邊uv,在排序的結果中u都在v之前。如果圖是有向無環圖,則拓撲排序是可能的 為什麼不說一定呢?圖論 是組合數學的乙個分支,它和其他分支比如 群論 拓撲學 矩陣論有著密切的關係。圖是圖論的主要研究物件。圖是由若干給定的...

拓撲排序演算法

對許多資料結構教材實在不滿意,至少我是看不懂 至於拓撲排序演算法,教材上那些偽 真真教人頭暈。只寫了幾個struct結構,我根本看不出這是鄰接表。如果給出乙個清晰明了的圖,一切不就簡單了?總之,關鍵就是建立乙個鄰接表。然後利用這個表進行拓撲排序。邊表結點宣告 typedef struct edgen...