• 大小: 676KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: 其他
  • 标签:

资源简介

拓扑排序,可以输出所有可能的拓扑排序~~!!!

资源截图

代码片段和文件信息

#include 
using namespace std;

//函数结果状态代码 
# define ERROR 0 
# define INFEASIBLE -1 
# define OVERFLOW -2
# define MAX_VERTEX_NUM 40

int *temp;  //用于储存VERTEX_NUM次回归后得到的序列

//用于拓扑排序的图的邻接表的定义
typedef int Status;
typedef struct ArcNode{    //弧结点
int adjvex;
bool deleteed;         //标志是否被删除
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{     //顶结点
char data;            //顶点名称
int indegree;
bool deleteed;        //标志是否被删除
ArcNode *firstarc;
}VNodeAdjList[MAX_VERTEX_NUM];
typedef struct{     //图
AdjList vertices;
int vexnumarcnum;
}ALGraph;

//int型的队列
class linkQueue
{
private:
struct QNode
{
int date;
QNode *next;
};
QNode *front;
QNode *rear;
public:
linkQueue()
{
front=rear=(QNode*)malloc(sizeof(QNode));
if (!front) exit(OVERFLOW);
front->next=NULL;
}
void Destroy()
{
while(front)
{
rear=front->next;
free(front);
front=rear;
}
front=rear=(QNode*)malloc(sizeof(QNode));
if (!front) exit(OVERFLOW);
front->next=NULL;
}
void EnQueue(int e)
{
QNode *p=new QNode;
if (!p) exit(OVERFLOW);
p->date=e;p->next=NULL;
rear->next=p;
rear=p;
}
int Size()
{
int count=0;
if (front==rear) return count;
QNode *p=front->next;
while(p)
{
++count;
p=p->next;
}
return count;
}
int DeQueue()     //输出单个元素
{
int a;
if (front==rear) {cout<<“队列空!“< QNode *p=front->next;
a=p->date;
front->next=p->next;
if (rear==p) rear=front;
free(p);
return a;
}
void PrintQueue(ALGraph G)  //用于输出全部队列元素
{
QNode *p=front->next;
while(p)
{
cout<date].data;
p=p->next;
}
cout< }
};

//建立邻接表
//定位顶点的函数
int LocateVex(ALGraph Gchar u)
{
int i;
for (i=0;i if(G.vertices[i].data==u) return i;
if (i==G.vexnum) {cout<<“错误的顶点名!“;exit(1);}
return -1;
}
//建立有向图的邻接表的函数
void CreateALGraph_adjlist(ALGraph &G)
{
int ijk;  
char v1v2;
ArcNode *p;
cout<<“请输入顶点数和弧数:“;
cin>>G.vexnum>>G.arcnum;
cout<<“开始构造邻接表:“< for (i=0;i {
cout<<“输入第“< cin>>G.vertices[i].data;
G.vertices[i].deleteed=false;
G.vertices[i].firstarc=NULL;
G.vertices[i].indegree=0;
}
for (k=0;k {
cout<<“请输入第“< cin>>v1>>v2;
i=LocateVex(Gv1);
j=LocateVex(Gv2);
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=j;
p->deleteed=false;
p->nextarc=G.vertices[i].firstarc;
G.vertices[i].firstarc=p;
G.vertices[j].indegree++;
}
return;
}
int *InDegree(ALGraph Gint &numint n)  //返回一个int型数组的指针,内含图中0度顶点的序号num返回其0度顶点数n是初始的顶点个数
{
int *a=(int *)malloc(sizeof(int));
a[0]=-1;      //a[0]=-1时无0度顶点
num=0;
for(int i=0j=0;i {
if (G.vertices[i].deleteed==true)  //如果已经删除
continue;
if (G.vertices[i].indegree==0)
{
if (a[0]==-1)
{
a[0]=i;
++j;
++num;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4793  2009-07-02 13:43  拓扑排序\chuopu.cpp

     文件       4284  2009-07-01 17:13  拓扑排序\ChuoPu.dsp

     文件        537  2009-07-01 15:39  拓扑排序\ChuoPu.dsw

     文件      41984  2009-07-02 14:44  拓扑排序\ChuoPu.ncb

     文件      53760  2009-07-02 14:44  拓扑排序\ChuoPu.opt

     文件       1267  2009-07-02 13:43  拓扑排序\ChuoPu.plg

     文件     532534  2009-07-02 13:43  拓扑排序\Debug\ChuoPu.exe

     文件     263005  2009-07-02 13:43  拓扑排序\Debug\chuopu.obj

     文件    1090560  2009-07-02 13:43  拓扑排序\Debug\ChuoPu.pdb

     文件     110592  2009-07-02 13:43  拓扑排序\Debug\vc60.pdb

     文件     417792  2009-07-02 16:33  拓扑排序\数据结构课程设计-拓扑排序.doc

     目录          0  2009-10-25 09:28  拓扑排序\Debug

     目录          0  2009-11-11 17:23  拓扑排序

----------- ---------  ---------- -----  ----

              2521108                    13


评论

共有 条评论

相关资源