zoukankan      html  css  js  c++  java
  • AOV拓扑排序实验总结-1

    AOV拓扑排序实验总结-1
     
    实验数据:
    1、实验输入数据在input.txt文件中
    2、对于n是指有顶点n个,数据的结束标志是一行0 0。
     
    实验目的:获取优秀的AOV排序算法模板
     
    数据结构安排:
    1、队列:负责记录入度为0且没有排序的AOV顶点
    2、邻接表结点:邻接表结点采用自定义的复合结构,保存顶点信息、边表头指针。
    3、邻接表边表:采取链表的形式存储数据
    4、邻接表的数据类型是相同的,只是在概念上使得结点独特的保存了当前起始顶点
    5、按照vertex的编号独立的使用一个数组indegree保存入度,一定程度的节省了空间
     
    实验内容:1、算法模板的设计 2、算法类的设计或头文件封装的尝试
     
    AOV算法模板要求:
    1、假定AOV排序成立
    2、vertex本身可以按照编号进行命名
     
    构建的邻接表展现:
    代码如下:
     1 for(int i=0;i<n;i++)
     2     {
     3         printf("vertex %d indegree %d points to:",aim[i].vertex,indegree[i]);
     4         point* temp=&aim[i];
     5         while(temp->next!=NULL)
     6         {
     7             temp=temp->next;
     8             printf("%d ",temp->vertex);
     9         }
    10         printf("
    ");
    11     }
    展示情况:
    vertex 0 indegree 0 points to:8 2
    vertex 1 indegree 0 points to:2 4
    vertex 2 indegree 2 points to:3
    vertex 3 indegree 2 points to:5 7 9 10
    vertex 4 indegree 1 points to:6
    vertex 5 indegree 1 points to:
    vertex 6 indegree 1 points to:10
    vertex 7 indegree 1 points to:
    vertex 8 indegree 1 points to:9 3
    vertex 9 indegree 2 points to:
    vertex 10 indegree 2 points to:
    总体模板运行结果:
      0  1  8  2  4  3  6  5  7  9 10
    运行正常
     
    实验代码:
     1 //算法模板的设计
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<malloc.h>
     5 #include<cstring>
     6 #include<queue>
     7 #include<algorithm>
     8 using namespace std;
     9 const int maxn = 30;
    10 struct point
    11 {
    12     int vertex;//顶点
    13     point* next;
    14 };
    15 
    16 int indegree[maxn];
    17 point aim[maxn];
    18 int n;
    19 
    20 int readin()
    21 {
    22     scanf("%d",&n);
    23     memset(indegree,0,sizeof(int)*n);
    24     for(int i=0;i<n;i++)
    25     {
    26         aim[i].next=NULL;
    27         aim[i].vertex=i;
    28     }
    29     //初始化
    30     int a,b;
    31     while(scanf("%d%d",&a,&b))
    32     {//a->b
    33         if(a==0&&b==0)break;
    34         indegree[b]++;//入度加1
    35         point* temp=&aim[a];
    36         while(temp->next!=NULL)temp=temp->next;
    37         //找到存有指向结点链表的末端
    38         temp->next=(point*)malloc(sizeof(point));
    39         temp=temp->next;//进入新的point点
    40         temp->vertex=b;//a->b
    41         temp->next=NULL;
    42     }//完成邻接表的构建
    43     return 0;
    44 }
    45 
    46 queue<int> psd;
    47 int topo_sort(int* ans)
    48 {
    49     bool ok[maxn];
    50     memset(ok,false,sizeof(ok));
    51     int cur=0;
    52     int num=n;
    53     while(1)
    54     {
    55         if(num)
    56         {
    57             for(int i=0;i<n;i++)
    58             {
    59                 if(ok[i])continue;
    60                 if(indegree[i]==0)
    61                 {
    62                     psd.push(i);
    63                     ok[i]=true;
    64                     num--;
    65                 }
    66             }//检查所有入度0的顶点并入队,留下入队标记
    67         }
    68         if(psd.empty())break;//队列为空则排序结束
    69         int p=psd.front();psd.pop();
    70         point* temp=&aim[p];
    71         ans[cur++]=p;//也可以写成ans[cur++]=aim[i].vertex;
    72         //提出结点并排序
    73         while(temp->next!=NULL)
    74         {
    75             temp=temp->next;
    76             indegree[temp->vertex]--;
    77         }//去掉相关有向边
    78     }
    79     return 0;
    80 }
    81 
    82 int ans[maxn];
    83 int main()
    84 {
    85     //freopen("input.txt","r",stdin);
    86     //freopen("ans.txt","w",stdout);
    87     readin();
    88     topo_sort(ans);
    89     for(int i=0;i<n;i++)
    90     {
    91         printf("%3d",ans[i]);
    92     }
    93     printf("
    ");
    94     return 0;
    95 }
  • 相关阅读:
    DB-概念-同义词:同义词/Synonym
    DB-概念-数据库:数据库/Database
    DB:目录
    信息安全-OAuth2.0:NuGetFromMicrosoft
    资源-DotNet-站点:DotNet 站点列表
    Nuget-Swagger-Swashbuckle:Swashbuckle
    Nuget-Doc:Nuget 简介
    Nuget-Doc:NuGet 介绍
    术语-Portal:Portal(Web站点)
    cocos2d-html5模板分析
  • 原文地址:https://www.cnblogs.com/savennist/p/12287905.html
Copyright © 2011-2022 走看看