图的基本操作-拓扑排序 (20分)-张春

6-1 实验四图的基本操作-拓扑排序 (20分)
实验四 图的基本操作-拓扑排序。1、要求学生理解和掌握图的基本概念;2、要求学生深刻理解图的主要的存储结构;3、掌握在邻接表存储结构下的图的深度优先遍历、广度优先遍历;4、掌握图的拓扑排序算法。本题要求根据程序中的图实现一个拓扑排序函数,无输入,直接输出拓扑排序结果,例如:A B C D E F (拓扑排序顶点序列,中间用两个空格间隔)。

函数接口定义:
在这里描述函数接口。例如:

void TopologicalSort(PGraph g)

裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:

#include<stdio.h>

#define MAX_VERTEX_NUM 20

typedef struct 
{
    int vertexNum;
    char vertex[MAX_VERTEX_NUM];
    int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
}Graph,*PGraph;


void createdGraph(PGraph g)
{
    int i,j;
    g->vertexNum=6;
    for(i=0;i<g->vertexNum;i++)
        g->vertex[i]='A'+i;
      for(i=0;i<g->vertexNum;i++)
         for(j=0;j<g->vertexNum;j++)
                g->arc[i][j]=0;
      g->arc[0][1]=1;
      g->arc[0][2]=1;
      g->arc[0][3]=1;
      g->arc[1][4]=1;
      g->arc[2][1]=1;
      g->arc[2][4]=1;
      g->arc[4][3]=1;
      g->arc[4][5]=1;
}

/* 请在这里填写答案 */

int main()
{
    Graph graph;
    createdGraph(&graph);
    TopologicalSort(&graph);
}

输入样例:
无输入

输出样例:
在这里给出相应的输出。例如:

A B C D E F

void TopologicalSort(PGraph g)
{
	int du[1010];
	int i,j,k;
	for(i=0; i<=100; i++)
		du[i]=0;
	for(i=0; i<g->vertexNum; i++)
	{
		for(j=0; j<g->vertexNum; j++)
		{
			if(g->arc[i][j])
				du[j]++;
		}
	}
	int flag=0;
	for(k=0; k<g->vertexNum; k++)
	{
		for(i=0; i<g->vertexNum; i++)
		{
			if(du[i]==0)
			{
				printf("%c  ",g->vertex[i]);
				for(j=0; j<g->vertexNum; j++)
				{
					if(g->arc[i][j])
					{
						g->arc[i][j]=0;
						du[j]--;
					}
				}
				du[i]=-1;
				break;
			}
		}
	}
}

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值