POJ 1094 變數排序 解題報告

2021-07-14 13:57:00 字數 1055 閱讀 9504

題目描述:把不同的變數進行公升序排序用小於操作符命令實現的。例如由a < b, b < c 和 c < d 可以得到公升序序列a, b, c, d 。

在本題中,你將得到若干條小於操作符命令,形如 a < b 的格式,請你確定利用這些命令,能否得到乙個唯一的公升序序列。

輸入格式:第1行為整數n,m,n(2 <= n <= 26)表示參與排序的是前n個大寫字母,m表示給出命令的條數。

輸出格式:輸出一行:

如果根據輸入能得到唯一的公升序序列,則輸出「sorted sequence determined after *** relations: yyy...y. 」

如果不能得到唯一的公升序序列,則輸出「sorted sequence cannot be determined. 」

如果不能得到公升序序列,則輸出「inconsistency found after *** relations. 」

上面的資訊中 *** 是乙個整數,是表示至多根據前***條資訊就可以得出該結論。 yyy...y表示得到的公升序序列的大寫字母串。

【輸入樣例】   

【樣例1】

4 6a解題思路:跟據題目描述不難想出該題可以轉為圖來解決,因為輸入均為按照小於操作符命令,所以可以轉為有向圖,該題翻譯過來即判斷輸入的有向圖是否為dag圖(有向無環圖)及其拓撲排序是否唯一。主要演算法為拓撲排序的bfs演算法,只是bfs的返回值應為int,設返回0表示不能得到公升序序列,返回1表示能得到唯一的公升序序列,返回2表示不能得到唯一的公升序序列。對於每讀入一條命令都應用bfs判斷一下。需注意的是,要確定不能得到唯一的公升序序列,需讀完所有命令後再判斷。

#include#include#include#include#include#include#includeusing namespace std;

const int maxn=30;

int n,m,x,y;

char s[maxn];

vectorg[maxn],topo;

int rd[maxn],trd[maxn];

struct cmp

};int bfs()

} if(topo.size()

POJ 1094解題報告

poj 1094解題報告 這個題主要的是使用拓撲排序,相關演算法隨便找一本演算法的書都能看到,也不難,就不羅嗦了。我使用鄰接表來儲存圖,並使用dm,dn分別儲存每個節點 即字母 的出度和入度。我只想強調一下需要注意的 一 先判斷是否有環路 我就是一開始在檢測到不能確定序列的時候就直接返回了,而沒有判...

POJ 1094 拓撲排序

文章大意是將n個字母排序 n 26 最終必須排成鍊錶式的輸出 一旦確定或者出現環,記錄當前步數,後續輸入無視 加個拓撲排序判斷圖的總結 1 如果輸入的有向圖中的點,不存在入度為0的點,則存在迴路,反過來則不成立 2 如果入隊的點的個數小於輸入的點的個數,則肯定存在迴路 3 如果存在的入度為零的點大於...

拓撲排序 poj1094

此題題目有點小問題,那也是很多人ac不了的原因 問題是,當給定的前k項條件能夠確定出大小順序時,即便k項之後出現了矛盾條件,輸出也應該是sorted sequence determined after k relations 後面再輸出排序好的序列!include include using nam...