求一段c语言代码,题目:建立图的存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中

题目:建立图的存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中,再编写函数实现图的拓扑排序。基本要求:选择邻接表作为有向图的存储结构模拟整个过程,并输出拓扑排... 题目:建立图的存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中,再编写函数实现图的拓扑排序。
基本要求:选择邻接表作为有向图的存储结构模拟整个过程,并输出拓扑排序的顶点序列
展开
 我来答
直角世界的博客
2019-08-30 · TA获得超过106个赞
知道小有建树答主
回答量:91
采纳率:89%
帮助的人:36.7万
展开全部

代码


/*输入:先输入两个数,代表点的数量和边的数量,

再输入各个边,起点编号 > 终点编号,编号从0开始

例子:

6 10

0 3

0 4

1 4

1 3

3 5

0 1

4 5

5 2

4 2

4 3

输出:

0 1 4 3 5 2

思路:

  1. 用vector建立邻接表

  2. 计算每个点的入度

  3. 如果是偏序无环的,一定存在入度为0的点,输出并且删除它,同时删除它出发的边,更新其他点的入度

  4. 循环直到移除所有点,输出顺序就是拓扑排序

*/

#include<iostream>

#include<vector>

using namespace std;


int main() {

freopen("in.txt","r",stdin);//重定向输入流//in.txt 建在程序所在的文件夹里

int M,N;

scanf("%d%d",&M,&N);//M个点,N条边 

vector<int> maps[M]; 

int innode[M]={0};//入度 

for(int i=0;i<N;i++)

{

int tx,ty;

scanf("%d%d",&tx,&ty);

maps[tx].push_back(ty);

++innode[ty];

}

for(int time=0;time<M;time++)

for(int i=0;i<M;i++)

{

if(innode[i]==0)

{

printf("%d ",i);

for(vector<int>::iterator it = maps[i].begin(); it != maps[i].end(); ++it)

{

--innode[*it];

}

innode[i]=-1;

break;

}

}

}

光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式