POJ 1128 DAG拓撲排序

2022-05-04 08:51:10 字數 1436 閱讀 2631

題目鏈結poj1128

給定一張邊框覆蓋圖,求邊框從上到下的關係

如果在a的邊框上出現了字母b,就說明b在a的上方

如果邊框a在邊框b的下方,就新增從a到b的一條有向邊(題目要求從下到上輸出)

那麼所求的是所得有向無環圖的拓撲排序

題目還要求按照字典序輸出所有可能的順序,用深度優先搜尋

#include #include 

#include

#include

#include

#include

#define max 1000007

#define maxn 50

#define maxm 1007

#define inf 0x3f3f3f3f

#define ninf 0xc0c0c0c0

#define mod 1000000007

using

namespace

std;

typedef

long

long

ll;int

head[maxn],tot,n,m,indegree[maxn],realn;

struct

edgeedge[maxm];

void addedge(int u,int

v)int visit[maxn],map[40][40],flag[40][40

],df[maxn];

struct

borderborder[maxn];

intqueue[maxn],iq;

void

init()}//

如果字母t在字母k的四條邊框上,則連線k到t的有向邊(從下到上的方向)

void adde(int k,int x1,int y1,int x2,int

y2) }

}}//

深度優先遍歷出所有的拓撲排序

void dfs(int now,int

k) printf("\n

");}

else

//從剩餘的點中選擇入度為0的點,從小到大遍歷

for(int i=1;i)

}//加回與now關聯的邊

for(int i=head[now];i!=-1;i=edge[i].next)

}}int

main()}}

for(int i=0;i)}}

for(int k=1;k<30;k++)

}//cout

}//cout

); }

return0;

}/*6 6bbbccc

baaaac

babcac

.adda.

.aaaa.

..dd..

*/

view code

POJ1128 拓撲排序 DFS

看到題應該很容易想到利用拓撲排序來判斷相框之間的關係,對於每乙個相框,我們遍歷一遍可以找到他的 上下左右 四條邊的位置,再搜尋這幾條邊上是否有其他字母,有的話就新增乙個類似於a然後就是我個人認為的這道題的難點,怎麼按照字典序輸出所有可能答案,最開始我想的是利用bfs跑拓撲,確定每個點的層級,再對相同...

POJ 1094 拓撲排序

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

拓撲排序 poj1094

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