拓撲排序 一種給定的特殊排序

2021-08-02 22:24:30 字數 1322 閱讀 3500

一種特殊的排序方法,什麼時候用到拓撲排序了,就是當給定了一種特殊的先後順序時,叫你以某種方式輸出給順序時就要想到用拓撲排序(比如).然後拓撲排序當然也可以用陣列直接進行模擬,但是時間不是這麼的快,所以用模擬鄰接表的方式(這個是最快,最省空間的)來寫,然後根據題目需要選取適當的優先佇列來模擬,雖然過程比較複雜,但是時間會快很多.!

注:當你用陣列和vector要爆時,就用陣列模擬臨接鍊錶的方式,就不會爆了.(對應的vector比對應的陣列更省空間.)

比如一道水題點這裡

—思路: 明顯給定了乙個先後順序,有叫輸出特定順序,所以首先想到拓撲排序.因為要求序號小的排前面,所以選取最小優先佇列.然後用乙個vector(或一維陣列)來存答案在輸出就可以了.

ac**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define clr(x) memset(x,0,sizeof(x))

#define ll long long int

#define pi acos(-1.0)

#define db double

using

namespace

std;

const

int maxn=505;

const

int eps=1e-6;

const

int inf=1e9;

const ll inf=1e15;

int n,m;

priority_queue,greater >q; //以最小值優先的優先佇列.

// 因為要求號數小的先出來.所以用最小值優先的佇列.

struct node

s[maxn*maxn];

int head[maxn];

int in[maxn];

int cnt;

void add(int a,int b)

//建立臨接鍊錶.

void bfs()

}//printf("%d\n",v.size());

for(int i=0;iprintf("%d%c",v[i],i==v.size()-1?'\n':' ');

}}int main()

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

bfs();

}}

NYOJ 8 一種排序(排序)

一種排序 時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述現在有很多長方形,每乙個長方形都有乙個編號,這個編號可以重複 還知道這個長方形的寬和長,編號 長 寬都是整數 現在要求按照一下方式排序 預設排序規則都是從小到大 1.按照編號從小到大排序 2.對於編號相等的長方形,按照長...

一種排序(set結構體排序)

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 輸入第一行有乙個整數 0輸出 順序輸出每組資料的所有符合條件的長方形的 編號 長 寬 樣例輸入 1 81 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 2 2 1樣例輸出 1 1 1 1 2 1 1 ...

一種快速排序演算法

using system class program for int l 0 l src.length l src count temp l i 3 0xff temp l static void main string args watch.stop console.writeline quick...