#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define MVNum 100 typedef int Status; typedef char VerTexType; typedef char OtherInfo;
typedef struct StackNode { int data; struct StackNode* next; }StackNode, * StackList;
StackList Pop(StackList S, int* e) { StackList p; p = S; if (!p) return ERROR; *e = p->data; S = S->next; free(p); return S; }
StackList Push(StackList S, int e) { StackList p; p = (StackNode*)malloc(sizeof(StackNode)); p->data = e; p->next = S; S = p; return S; }
typedef struct ArcNode { int adjvex; struct ArcNode* nextarc; OtherInfo info; }ArcNode;
typedef struct VNode { VerTexType data; ArcNode* firstarc; }VNode, AdjList[MVNum];
typedef struct { AdjList vertices; int vexnum, arcnum; }ALGraph;
int indegree[100] = { 0 };
int TopoSort(ALGraph G, int* topo,int *etv) { StackList S = NULL; ArcNode* p; for (int i = 0; i < G.vexnum; i++) { if (!indegree[i]) { S = Push(S, i); } } int m = 0; for (int i = 0; i < G.vexnum; i++) { etv[i] = 0; } int index = 0; while (S) { S = Pop(S, &index); topo[m] = index; m++; while (p != NULL) { int k = p->adjvex; indegree[k]--; if (indegree[k] == 0) { S = Push(S, k); } if (etv[index] + (p->info) > etv[k]) { etv[k] = etv[index] + (p->info); } p = p->nextarc; } } topo[m] = -1; if (m < G.vexnum) { return 0; } else { return 1; } }
void CriticalPath(ALGraph G, int* etv, int* ltv) { int ete, lte; ArcNode* p; int topo[99] = { 0 }; if (TopoSort(G,topo,etv)) { for (int i = 0; i < G.vexnum; i++) { ltv[i] = etv[G.vexnum - 1]; } } int count = G.vexnum; while (count) { int gettopo = topo[--count]; for (p = G.vertices[gettopo].firstarc; p ;p = p->nextarc) { int k = p->adjvex; if (ltv[k] - (p->info) < ltv[gettopo]) { ltv[gettopo] = ltv[k] - (p->info); } } } for (int i = 0; i < G.vexnum; i++) { for (p = G.vertices[i].firstarc; p; p = p->nextarc) { int k = p->adjvex; ete = etv[i]; lte = ltv[k] - p->info; if (ete == lte) { } } } }
int main() { int[n] a; int count = 0; }
void insert(int val) { if (count == a.length) { int sum = 0; for (int i = 0; i < a.length; i++) { sum = sum + a[i]; } a[0] = sum; count = 1; } a[count] = val; count++; }
int find(int[] a, int n, int x) { int pos; for (int i = 0; i < n; i++) { if (a[i] == x) { pos = i; break; } } return pos; }
|