求解一个DAG的各个节点的b-level的C程序
来源:互联网 发布:java唤醒sleep线程 编辑:程序博客网 时间:2024/06/05 06:05
求解一个DAG的各个节点的b-level的C程序(包括求每个节点的入度和所有节点的topological sort)
#include <stdio.h>
#include <stdlib.h>
//不可以写与库函数同名的函数,会报错。
int main()
{
int ct[3][3]={1,3,2,3,1,3,2,3,1}, cc[3][3]={1,2,4,2,1,2,4,2,1};//会涉及到一个问题,同一个core和同一种core
int et[6][3]={1,2,4,1,3,5,2,4,5,2,3,6,1,2,3,3,5,7};
int ec[6][3]={10,8,7,12,10,8,13,11,9,12,10,7,11,9,8,15,13,9};
int data[6][6]={0,6,5,0,0,0,0,0,0,7,0,0,0,0,0,7,8,0,0,0,0,0,0,3,0,0,0,0,0,9,0,0,0,0,0,0};
int admarix[6][6]={0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0};
float c[6][6],rankup[6], w[6];
int indegree[6]={0}, v[6];
float sum=0, Max;
int i,j,t,k=0,s=-1;
//求每个节点的入度。
printf("Please output the degrees of all nodes:\n ");
for ( i=0;i<6; i++)
{ for ( j=0;j<6; j++)
if(data[j][i]!=0)
indegree[i]++;
printf("%d ", indegree[i]);
}
printf("\n\n");
//接下来需要一个topological sort, 然后才能求rank数组。
printf("Please output the inverse topological sort of all nodes:\n ");
for(i=0;i<6;i++)
if(indegree[i]==0)
{
indegree[i]=s;
s=i;
}
while(s!=-1)
{
// printf("%d",s);
v[k++]=s;
// printf("v[%d]=%d ",k,s); 不可以用此语句来给数组v赋值,会出错。
i=s;
s=indegree[s];
for(j=0;j<6;j++)
{
if(data[i][j])
indegree[j]--;
if(indegree[j]==0)
{
indegree[j]=s;
s=j;
}
}
}
for ( i=0;i<6; i++)
{
printf("v[%d]=%d ",i, v[i]);
}
printf("\n\n");
//求每个节点的平均执行时间
for ( i=0;i<6;i++)
{ t=0; //注意一些公用的变量的初始值的变化,叠加的话可能导致错误的结果。去掉t=0,结果就是错误的。
for ( j=0;j<3;j++)
t=t+et[i][j];
w[i]=t/3.0;
printf("w[%d]=%4.3f\n", i,w[i]);
}
for ( i=0;i<3; i++)
for ( j=0;j<3; j++)
{
sum=sum+ct[i][j];
}
printf("\n sum=%4.3f\n", sum);
//求每条边上的平均通信时间
for ( i=0;i<6; i++)
{ for ( j=0;j<6; j++)
{
c[i][j]=sum*data[i][j]/9;
printf("c[%d][%d]=%4.3f\n", i,j,c[i][j]);
}
printf("\n");
}
rankup[v[5]]=w[v[5]];
//求每个节点的rankup。
for ( i=5; i>=0; i--)
{ Max=0; //注意一些公用的变量的初始值的变化,叠加的话可能导致错误的结果。去掉Max=0,结果就是错误的。
for ( j=0;j<6;j++)
{ if (data[v[i]][j]!=0)
if (Max<c[v[i]][j]+rankup[j])
Max=c[v[i]][j]+rankup[j];
}
rankup[v[i]]=w[v[i]]+Max;
}
for ( i=0;i<6; i++)
printf("rankup[%d]=%4.3f\n", i, rankup[i]);
system("pause");
return 0;
}
- 求解一个DAG的各个节点的b-level的C程序
- 如何求解一个整数的各个位上的数字
- 一个让人发狂的PI求解C程序
- 一个让人发狂的PI求解C程序
- 一个让人发狂的PI求解C程序
- 第十周项目-- 【设计一个算法Level(b,x,h),返回二叉链b中data值为x的节点的层数】
- 把一个节点的父节点重定为<b>元素
- 求解方程Ax=b的通用程序
- Google 各个Level的比例尺与分辨率
- CF 721C DAG上的dp
- 一个用于统计输入中各个C语言关键字出现次数的程序
- 求解次方的次方。pow(a,pow(b,c))%p
- 素数的求解程序
- 一个数组的求解
- 客户端得到HDFS各个节点的状况
- Hadoop对各个节点的角色定义
- Cassandra集群各个节点之间的通讯
- Hadoop对各个节点的角色定义
- js页面刷新
- 谈谈自己
- 在 VC++6.0 中将 JPG 格式图片转换成 BMP 格式
- struts2标签详解
- java web 路径问题
- 求解一个DAG的各个节点的b-level的C程序
- 在多台服务器上简单实现Redis的数据主从复制
- 120 - Stacks of Flapjacks
- C语言中注释掉代码的“第三招”及制造死循环方法
- (转载)cocos2d-X学习之坐标系统
- 39行代码实现JS HTML模板(轻量+高效+易用)
- SCCM 2012 SP1 安装出现"Client push fails with Authenticode Signature error"解决方法
- 关于android示例程序(bitmapfun)——高效加载图片的缺陷
- Android Layout各种布局