建立关键路径的程序 int SearchMapPath(vexnode* Graph,int vexnumber,int arcnumber) { int tota ltime=0; int m=0; int i,j,k,t; char sv[100]; int front,rear; int *topology_queue,*vl,*ve,*el,*ee; for(i=0;i<vexnumber;i++) ve[i]=0; for(i=0;i<vexnumber;i++) { if(Graph[i].id==0) topology_queue[++rear]=i; m++; }此函数模块流程图
时间: 2024-01-13 20:03:24 浏览: 77
好的,这是一个建立关键路径的程序,下面是代码解释:
```
int SearchMapPath(vexnode* Graph, int vexnumber, int arcnumber) {
int totaltime = 0;
int m = 0;
int i, j, k, t;
char sv[100];
int front, rear;
int* topology_queue, * vl, * ve, * el, * ee;
for (i = 0; i < vexnumber; i++) ve[i] = 0;
for (i = 0; i < vexnumber; i++) {
if (Graph[i].id == 0) {
topology_queue[++rear] = i;
m++;
}
}
}
```
这个函数的作用是建立关键路径。首先定义了一些变量,包括总时间、m、i、j、k、t、sv、front、rear、topology_queue、vl、ve、el和ee。然后,使用两个 for 循环将数组 `ve` 中的所有元素初始化为 0,同时检查每个节点的入度,若为 0,则将其加入拓扑排序队列 `topology_queue` 中,并将 `m` 加 1。循环结束后,所有入度为 0 的节点均已加入队列中。
这段代码的主要作用是初始化拓扑排序队列,并将入度为 0 的节点加入队列中。
相关问题
定义主函数 void main( ) { int vexnumber,arcnumber,totaltime=0; printf("请输入这个图中的节点数:"); scanf("%d",&vexnumber); printf("请输入这个图中的弧数:"); scanf("%d",&arcnumber); vexnode* Graph=(vexnode*)malloc(vexnumber*sizeof(vexnode)); CreateGraph(Graph,vexnumber,arcnumber); SearchMapPath(Graph,vexnumber,arcnumber);此函数模块流程图 }
好的,这是一个定义主函数的代码,其目的是为了创建一个图并寻找其中的路径。下面是代码解释:
```
void main() {
int vexnumber, arcnumber, totaltime = 0;
printf("请输入这个图中的节点数:");
scanf("%d", &vexnumber);
printf("请输入这个图中的弧数:");
scanf("%d", &arcnumber);
vexnode* Graph = (vexnode*)malloc(vexnumber * sizeof(vexnode));
CreateGraph(Graph, vexnumber, arcnumber);
SearchMapPath(Graph, vexnumber, arcnumber);
}
```
这个函数中,首先定义了三个变量,分别是节点数、弧数和总时间,它们的初始值都是0。接着使用 `printf()` 函数和 `scanf()` 函数获取用户输入的节点数和弧数。然后,使用 `malloc()` 函数动态分配内存,创建一个大小为 `vexnumber * sizeof(vexnode)` 的数组 `Graph`。接下来,调用 `CreateGraph()` 函数来创建图。最后,调用 `SearchMapPath()` 函数来寻找图中的路径。
建立AOE图的程序 void CreateGraph(vexnode* Graph,int vexnumber,int arcnumber) { int begin,end,duttem,i; char ch; edgenode *p; for(int i=0;i<vexnumber;i++) { Graph[i].id =0; Graph[i].firstedge =NULL; } printf("请输入这个图中的各个顶点的值:\n"); for(i=0;i<vexnumber;i++){ scanf("%s",&ch); Graph[i].data=ch; } printf("请输入图中弧的起始点及权值:其格式为<起点,终点,权值>\n"); for(int k=0;k<arcnumber;k++) { scanf("%d,%d,%d",&begin,&end,&duttem); p=(edgenode*)malloc(sizeof(edgenode)); p->adjvex =end-1; p->w =duttem; Graph[end-1].id ++; p->nextedge =Graph[begin-1].firstedge ; Graph[begin-1].firstedge =p; }此函数模块流程图
好的,这是一个建立AOE图的程序,下面是代码解释:
```
void CreateGraph(vexnode* Graph, int vexnumber, int arcnumber) {
int begin, end, duttem, i;
char ch;
edgenode* p;
for (int i = 0; i < vexnumber; i++) {
Graph[i].id = 0;
Graph[i].firstedge = NULL;
}
printf("请输入这个图中的各个顶点的值:\n");
for (i = 0; i < vexnumber; i++) {
scanf("%s", &ch);
Graph[i].data = ch;
}
printf("请输入图中弧的起始点及权值:其格式为<起点,终点,权值>\n");
for (int k = 0; k < arcnumber; k++) {
scanf("%d,%d,%d", &begin, &end, &duttem);
p = (edgenode*)malloc(sizeof(edgenode));
p->adjvex = end - 1;
p->w = duttem;
Graph[end - 1].id++;
p->nextedge = Graph[begin - 1].firstedge;
Graph[begin - 1].firstedge = p;
}
}
```
这个函数的作用是创建一个AOE图。函数中首先使用了一个 for 循环,将图中每个节点的 `id` 和 `firstedge` 均初始化为 0 和 NULL。接着,使用 `printf()` 和 `scanf()` 函数分别获取每个节点的值,并将其存储在相应的 `Graph[i].data` 中。然后,使用 `printf()` 函数提示用户输入每个弧的起始点、终点和权值,并使用 `scanf()` 函数获取这些信息。接着,创建一个新的 `edgenode` 结点,并将其 `adjvex` 和 `w` 分别初始化为输入的终点和权值。然后,将终点的 `id` 加 1,将新创建的节点插入到起点的邻接表开头,并更新起点的 `firstedge`。最后,循环结束后,AOE图创建完成。
阅读全文