欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

EOJ_1102_任务调度问题

发布时间:2024/4/11 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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_任务调度问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。