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