【王道数据结构】【chapter6图】【P258t7】

试编写 利用DFS实现有向无环图的拓扑排序的算法

#include <iostream>
#define maxsize 10
typedef struct node{
    int data;
    struct node *next;
}node ,*pnode;


pnode buynode(int x)
{
    pnode tmp=(pnode) malloc(sizeof (node));
    tmp->data=x;
    tmp->next= nullptr;
    return tmp;
}

pnode * graph(int point)//结点数量
{
    pnode * g=(pnode*) malloc(sizeof (pnode)*point);
    for(int i=0;i<point;i++)
        g[i]= buynode(i);
    return g;
}
void insert(pnode* g,int p1,int p2)//无向图
{
    pnode tmp=g[p1];
    while(tmp->next&&tmp->next->data<p2) tmp=tmp->next;
    pnode ne=tmp->next;
    tmp->next= buynode(p2);
    tmp->next->next=ne;

//    tmp=g[p2];
//    while(tmp->next&&tmp->next->data<p1) tmp=tmp->next;
//    ne=tmp->next;
//    tmp->next= buynode(p1);
//    tmp->next->next=ne;
}
void figure1(pnode* g)
{
    insert(g,0,1);
    insert(g,0,2);
    insert(g,1,3);
    insert(g,1,4);
    insert(g,2,4);
    insert(g,2,3);
    insert(g,5,2);
//    insert(g,1,2);
}
void print(pnode *g,int point)
{
    for(int i=0;i<point;i++)
    {
        pnode tmp=g[i];
        while(tmp) {
            printf("%3d",tmp->data);
            tmp=tmp->next;
        }
        puts("");
    }
}

void dfs(pnode * g,int point,int* &visited,int &time,int* &finishtime)
{
    visited[point]=1;
//    printf("%3d",point);
    pnode tmp=g[point];
    //先访问子节点,将子节点全部放问完了再访问根节点
    while(tmp->next)
    {
        if(!visited[tmp->next->data]) dfs(g,tmp->next->data,visited,time,finishtime);
        tmp=tmp->next;
    }
    time=time+1;
    finishtime[point]=time;
}
void dfstraverse(pnode* g ,int num)
{
    int * visited=(int *) malloc(sizeof (int)*maxsize);
    int *finishtime=(int*) malloc(sizeof (int)*num);
    for(int i=0;i<maxsize;i++) visited[i]=0;
    for(int i=0;i<num;i++) finishtime[i]=0;
    int time=0;
    for(int i=0;i<num;i++)
    {
        if(!visited[i]) dfs(g,i,visited,time,finishtime);
    }
//    puts("");
//    for(int i=0;i<num;i++) printf("%3d",finishtime[i]);
    puts("");
    for(int i=0;i<num;i++){
        for(int j=0;j<num;j++){
            if(finishtime[j]==num-i){
                printf("%2d->",j);
            }
        }
    }
}
int main() {
    pnode* g1=graph(6);
    figure1(g1);
    print(g1,6);
    dfstraverse(g1,6);
    return 0;
}

测试的图如下 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/411854.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【K8s】初识PV和PVC

​ 目录 收起 O、致谢 一、前言 二、Volume 2.1 什么是Volume 2.2 为什么要引入Volume 2.3 Volume类型有哪些 2.4 Volume如何使用 2.4.1 通过emptyDir共享数据 2.4.2 使用HostPath挂载宿主机文件 2.4.3 挂载NFS至容器 三、PV和PVC 3.1 什么是PV和PVC 3.2 为什么要引入PV和PVC 3…

Remainder Problem(根号分治)

Educational Codeforces Round 71 (Rated for Div. 2) F. Remainder Problem 题目链接 F. Remainder Problem 题意&#xff1a; 给你一个由 500000 500000 500000 个整数&#xff08;编号从 1 1 1 到 500000 500000 500000 &#xff09;组成的数组 a a a 。最初 a a a…

【JavaEE】网络原理: HTTPS协议相关内容

目录 HTTPS 是什么 HTTPS 的工作过程 对称加密 非对称加密 引入证书 理解数据签名 通过证书解决黑客攻击 HTTPS 是什么 HTTPS也是一个应用层协议, 是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输的, 这就导致在传输过程中出现一些被篡…

minHash(最小哈希)和LSH(局部敏感哈希)

在数据挖掘中,有一个比较基本的问题,就是比较两个集合的相似度。关于这个问题,最笨的方法就是用一个两重循环来遍历这两个集合中的所有元素,进而统计这两个集合中相同元素的个数。但是,当这两个集合里的元素数量非常庞大时,同时又有很多个集合需要判断两两之间的相似度时…

代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

文章目录 [1.修剪二叉搜索树(https://leetcode.cn/problems/trim-a-binary-search-tree/description/)2.将有序数组转换为二叉搜索树3.把二叉搜索树转换为累加树 [1.修剪二叉搜索树(https://leetcode.cn/problems/trim-a-binary-search-tree/description/) 遇到超范围节点&…

论文精读--GPT3

不像GPT2一样追求zero-shot&#xff0c;而换成了few-shot Abstract Recent work has demonstrated substantial gains on many NLP tasks and benchmarks by pre-training on a large corpus of text followed by fine-tuning on a specific task. While typically task-agnos…

探究前端路由hash和history的实现原理(包教包会)

今天我们来讲一讲前端中很重要的一个部分路由&#xff08;router&#xff09;&#xff0c;想必前端小伙伴对‘路由’一词都不会感到陌生。但是如果哪天面试官问你&#xff0c;能大概说一说前端路由的实现原理吗&#xff1f; 你又会如何应对呢&#xff1f; 今天勇宝就带着大家一…

Educational Codeforces Round 160 (Rated for Div. 2) D. Array Collapse(笛卡尔树+DP)

原题链接&#xff1a;D. Array Collapse 题目大意&#xff1a; 给你一个长度为 n n n 的排列 p p p &#xff0c;排列的定义为 [ 1 , 2 , 3 , . . , n ] [1,2,3,..,n] [1,2,3,..,n] 中每个数都出现 恰好 一次。 你可以做 任意多次 这样的操作&#xff1a; 选出一个任意长度…

8万就能买混动!秦PLUS、启源A05、帝豪L Hi-P谁值得买?

文 | AUTO芯球 作者 | 雷歌 你可以不买比亚迪&#xff0c;但一定要感谢比亚迪。 比亚迪凭着一己之力&#xff0c;将整个混动汽车的价格降到了7万元时代。 秦PLUS价格自9.98万直降2万来到7.98万后&#xff0c;它的直接竞争对手们开始降价&#xff0c;长安启源A05混动降至7.8…

Linux提权—服务漏洞,以MySQL-UDF提权为例

UDF(user defined function&#xff0c;用户自定义函数) 利用条件&#xff1a; 有对MySQL数据库进行创建&#xff0c;插入&#xff0c;删除的权限 secure_file_priv为空 利用过程 secure_file_priv的值为空或者是我们恰巧需要用到的目录&#xff0c;如下&#xff1a; 提权成…

数学建模论文、代码百度网盘链接

1.[2018中国大数据年终总决赛冠军] 金融市场板块划分与轮动规律挖掘与可视化问题 2.[2019第九届MathorCup数模二等奖] 数据驱动的城市轨道交通网络优化策略 3.[2019电工杯一等奖] 露天停车场停车位的优化设计 4.[2019数学中国网络数模一等奖] 基于机器学习的保险业数字化变革…

C#通过泛型方法的重载分别调用主窗体和提示窗体

目录 一、涉及到的知识点 1.泛型方法的重载 2.使用泛型更好地实现通用化 二、示例&#xff1a;泛型方法及其重载 1.源码 2. 生成效果 实际开发项目时&#xff0c;有时会因为调用窗体或提示窗体过多&#xff0c;而难于管理&#xff0c;这时&#xff0c;可以通过泛型方法的…

关于 REST API,你了解多少?

什么是 REST API REST 是 REpresentational State Transfer 的缩写&#xff0c;是分布式超媒体系统的架构风格。Roy Fielding 于 2000 年在他的著名论文中首次提出了这一点。从那时起&#xff0c;它已成为构建基于 Web 的 API&#xff08;应用程序编程接口&#xff09;的最广泛…

保障工作效率!实时监管员工工作微信

随着移动办公的普及&#xff0c;员工使用微信进行工作沟通已成为常态。为了实时监管员工工作微信&#xff0c;企业可以通过个微管理系统来提高效率并确保合规&#xff1a; 给员工分配微信子账号 企业管理者可以直接在系统上给员工分配子账号&#xff0c;并轻松查看子账号的工…

leetcode hot100 买卖股票的最佳时机二

注意&#xff0c;本题是针对股票可以进行多次交易&#xff0c;但是下次买入的时候必须保证上次买入的已经卖出才可以。 动态规划可以解决整个股票买卖系列问题。 dp数组含义&#xff1a; dp[i][0]表示第i天不持有股票的最大现金 dp[i][1]表示第i天持有股票的最大现金 递归公…

ElasticSearch之bool多条件查询

写在前面 在实际的业务场景中&#xff0c;不可能只是简单的单值查询 &#xff0c;更多的是n个条件的综合查询&#xff0c;就像下面的搜索&#xff1a; 针对这种场景我们就需要依赖于bool查询了&#xff0c;本文就一起来看下这部分的内容。 1&#xff1a;bool查询介绍 bool查…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码&#xff0c;应导师的要求&#xff0c;需要再README中加入对实验视频的展示&#xff0c;但是github的README.md其实就是一个markdown文件&#xff0c;据我的理解这个文件里应该无法直接插入视频吧&#xff1f;&#xff08;如果后续有办法直接…

python中的类与对象(2)

目录 一. 类的基本语法 二. 类属性的应用场景 三. 类与类之间的依赖关系 &#xff08;1&#xff09;依赖关系 &#xff08;2&#xff09;关联关系 &#xff08;3&#xff09;组合关系 四. 类的继承 一. 类的基本语法 先看一段最简单的代码&#xff1a; class Dog():d_…

Python Web开发记录 Day3:BootStrap

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 三、BootStrap1、BootStrap-初体验2、BootStrap…