当前位置:
首页 >
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_任务调度问题的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: EOJ_1094_寻找航海路线
- 下一篇: VS2019-写opengl时Bugs合