C语言编程是否具有偏序关系,编程实现由偏序集合构造全序集合,最好能用C或C++编写,谢谢了...

cc0185c38d1b174e0f465360543d58d5.png

2015-1-26 02:05:11

#include

#include

#include

using namespace std;

ifstream fin("in.txt");

#define MAX_VERTEX_NUM 26

stack s;

typedef struct ArcNode{

int adjvex;

struct ArcNode *nextarc;

ArcNode(){nextarc=0;}

//  InfoType *info;

}ArcNode;

typedef struct VNode{

int data;

ArcNode *firstarc;

VNode(){firstarc=0;}

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct{

AdjList vertices;

int vexnum,arcnum;

int kind;

}ALGraph;

bool TopologicalSort(ALGraph G,int *indegree)

{

int i,k;

for(i=1;i

{

if(!indegree[i]){s.push(i);}

}

int count=0;

ArcNode *p;

while(!s.empty())

{

i = s.top();

s.pop();

cout<";

count++;

for(p=G.vertices[i].firstarc;p;p=p->nextarc)

{

k = p->adjvex;

indegree[k]--;

if(!indegree[k])s.push(k);

}

}

if(count

return true;

}

int main()

{

int i;

ALGraph g;

cout<

fin>>g.vexnum>>g.arcnum;

for(i=1;i

g.vertices[i].data = i;

int b,e;

ArcNode *p;

int *indegree = new int[g.vexnum+1];

//注意 int *a=new int(n);  申请一个整型变量空间,赋初值为n,并定义一个整型指针a指向该地址空间

//int *indegree=(int *)malloc(sizeof(int)*(g.vexnum+1));

memset(indegree,0,sizeof(int)*(g.vexnum+1));

cout<

for(i=1;i

{

cout<

fin>>b>>e;

p = new ArcNode();

p->adjvex = e;

p->nextarc = g.vertices[b].firstarc;

g.vertices[b].firstarc = p;

indegree[e]++;

cout<

}

if(TopologicalSort(g,indegree))cout<

else cout<

return 0;

}

其实是一个拓扑排序实现偏序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值