EOJ_1102_任务调度问题
生活随笔
收集整理的這篇文章主要介紹了
EOJ_1102_任务调度问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//因為N<=100 所以邊數可能<=100*100(每個點和其他99個點相連),邊的內存不夠,可能會爆棧
#include<bits/stdc++.h>using namespace std;#define MAXN 10100
#define MAXM 10001typedef struct
{int t_ver, h_ver;
}E_NODE;//用于輸入有向邊的結構typedef struct vl_node
{int ver;vl_node* link;
}VL_NODE;//用于建立鄰接鏈表,定義鏈表中的一個結點的結構typedef struct ch_node
{int count;VL_NODE* head;
}CH_NODE;//鄰接鏈表的頭節點E_NODE e[MAXN];
CH_NODE ch[MAXN];
int tpv[MAXN];
int n,m;void creat_adj_list(int n, int m, E_NODE e[], CH_NODE ch[])
{//創建鄰接鏈表int i,u,v;VL_NODE* p;for(i = 1 ; i <= n ; i++){ ch[i].count = 0;ch[i].head = NULL;}for(i = 1 ; i <= m ; i++){u = e[i].t_ver;v = e[i].h_ver;p = (VL_NODE*) malloc(sizeof(VL_NODE));p->ver = v;p->link = ch[u].head;ch[u].head = p;(ch[v].count)++;}
}int topol_order(int n)
{int i,j,k;int top = 0;VL_NODE* t;for(i = 1 ; i <= n ; i++){if(ch[i].count == 0){ch[i].count = top;top = i;}}i = 0;while(top != 0){j = top;top = ch[top].count;tpv[++i] = j;t = ch[j].head;while(t != NULL){k = t->ver;if(--(ch[k].count) == 0){ch[k].count = top;top = k;}t = t->link;}}return i;
}int main()
{m = 1;cin >> n;for(int i = 1 ; i <= n ; i++){int count;cin >> count;if(!count) continue;else{for(int j = 0 ; j < count ; j++){int tmpVertex;cin >> tmpVertex;e[m].t_ver = tmpVertex;e[m++].h_ver = i;}}}m--;creat_adj_list(n,m,e,ch);cout << (topol_order(n) >= n) << endl;}
總結
以上是生活随笔為你收集整理的EOJ_1102_任务调度问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EOJ_1094_寻找航海路线
- 下一篇: VS2019-写opengl时Bugs合