图的算法
1.编一C程序,它能根据读入的数据构造有向图G,并输出G的DFS遍历序列(从V0开始),
图的输入形式为n V0 Vi0 V1 Vi1 V2 Vi2...Vi Vin -1 -1(-1,-1为输入结束标记,其余的值都>=0且
它们都是整数,且100>n>0。(注:程序的可执行文件名必须是 e2.exe,存于你的账号或其debug目录下。)
输入: 9 0 1 0 2 0 7 1 2 1 4 2 3 3 5 3 6 4 3 4 5 7 8 8 6 -1 -1
#include<stdio.h>
#define MAX 100
typedef enum{False,True} Boolean;
int G[MAX][MAX];
int n;
//建立图的邻接矩阵G[][]
void GreateG(){
int i,j;
printf("Input the number of the node:");
scanf("%d", &n);
printf("\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
G[i][j]=0;
}
}
do{
scanf("%d%d", &i,&j);
G[i][j]=1;
}while((i!=-1) && (j!=-1));
}
//拓扑排序,输出拓扑序列
void TopSort(){
int i,j;
//按照无前驱顶点优先思想,degree[]存放个节点的入度
int degree[100];
Boolean visited[MAX],flag=True;
printf("The Topolgical Order as follow:");
for(i=0;i<n;i++){
degree[i]=0;
visited[i]=False;
}
printf("\n");
while(flag==True){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
degree[i]=G[j][i]+degree[i];
}
}
i=0;
//最先输出入度为0的顶点
while((i<n) && (degree[i]!=0) || visited[i]==True){
i++;
}
//所有节点均已输出结束,否则说明存在环,无拓扑序列
if(i<n){
printf("%d",i);
visited[i]=True;
for(j=0;j<n;j++){
G[i][j]=0;
degree[j]=0;
}
}else{
flag = False;
}
}
}
void main(){
GreateG();
TopSort();
printf("\n");
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束