• 大小: 8KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: C/C++
  • 标签: DAG图  

资源简介

算法实验:计算DAG图最长路径并输出。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include
#include 
using namespace std;

/*链表节点定义*/
struct listNode{
    int name;/*节点号*/
    listNode *next;

    listNode(int xlistNode *t){
        name=x;
        next=t;
    }
};
/*头节点定义*/
struct vNode{
    int color;/*0:白色;1:灰色;2:黑色*/
    int len;
    int nextN;//DAG图最长路径的后续结点
    int indeg;
    listNode *next;
};

const int v=100; /*点数*/
const int e=500; /*边数*/
int topoList[v];/*拓扑序列*/
int topo=0;/*拓扑序列中已有的元素个数*/

class GraphlinkedTable{
public:
    vNode vertex[v];/*定义头结点*/
    vNode dag[v];

    GraphlinkedTable();
    ~GraphlinkedTable(){};
    void buildGraph();
    bool searchEdge(int v1int v2);
    void insertEdge(vNode *nodeint v1int v2);
    void print(vNode *v);
    void searchBFS(int v1);
    int searchV(int v1);/*寻找未被标记的结点*/
    void DFS(int v1);/*第一种遍历方法*/
    void InDegeree();/*计算每个点的入度*/
    int DP(int v1);
    void searchLen();
    void printPath(int v1);
};
GraphlinkedTable::GraphlinkedTable()/*构造函数*/
{
    for(int i=0;i    {
        vertex[i].next=NULL;
        vertex[i].color=0;/*0表示还未遍历过*/
        vertex[i].len=0;
        vertex[i].nextN=-1;
        vertex[i].indeg=0;
        //vertex[i].dp=0;
        dag[i].next=NULL;
    }
}
void GraphlinkedTable::buildGraph(){}
void GraphlinkedTable::insertEdge(vNode *vint v1int v2){
    listNode *node=(listNode*)malloc(sizeof(listNode*));
    node->name=v2;
    node->next=NULL;/*构造节点*/

    listNode *temp=v[v1].next;
    if(!temp){/*若无其他节点*/
        v[v1].next=node;
        return;
    }
    listNode *tempbefore;
    while(temp){/*遍历所有节点*/
        tempbefore=temp;
        temp=temp->next;
    }
    tempbefore->next=node;
}
bool GraphlinkedTable::searchEdge(int v1int v2){
    listNode *temp=vertex[v1].next;
    int edge=0;
    while(temp){
        if(temp->name==v2){
            edge=1;
            break;
        }
        temp=temp->next;
    }

    if(edge==0)/*边不存在返回true否则返回false*/
        return true;
    else
        return false;
}
void GraphlinkedTable::print(vNode *node){
    for(int i=0;i        cout<“;
        listNode *temp=node[i].next;
        while(temp){
            cout<name<<“->“;
            temp=temp->next;
        }
        cout<<“null“<    }
}
void GraphlinkedTable::searchBFS(int v1){
    int dis[v];/*初始化距离*/
    for(int i=0;i        dis[i]=-1;
    }
    dis[v1]=0;
    int u;/*前驱结点的值*/
    int v2;/*当前节点的值*/
    bool end1=false;/*是否结束循环*/
    while(!end1){
        end1=true;
        queue q;/*定义一个队列*/
        q.push(v1);/*将源结点加入队列中*/
        while(!q.empty()){
            u=q.front();
            q.pop();
            listNode *temp=vertex[u].next;
            while(temp){
                v2=temp->name;
                if(dis[v2]==-1){/*该结点未被遍历过*/
                    q.push(v2);
          

评论

共有 条评论

相关资源