拓扑排序(判断有向图是否有回路)

#include   
#include   
#include   
using namespace std;  
  
//表结点  
typedef struct ArcNode{  
    int adjvex;//该弧所指向的顶点的位置   
    ArcNode *nextarc;  
}ArcNode;  
  
//头结点  
typedef struct VNode{  
    string data;//顶点信息  
    ArcNode *firstarc;//第一个表结点的地址,指向第一条依附该顶点的弧的指针  
}VNode, AdjList[10];  
  
typedef struct ALGraph{  
    AdjList vertices;  
    int vexnum, arcnum;  
}ALGraph;  
  
int LocateVex(ALGraph G, string u)//返回顶点u在图中的位置  
{  
    for(int i=0; i>G.vexnum>>G.arcnum;  
  
    cout<<"请输入顶点:";  
    for(i=0; i>G.vertices[i].data;  
        G.vertices[i].firstarc=NULL;  
    }  
  
    cout<<"请输入边:"<>v1>>v2;  
        i=LocateVex(G, v1);  
        j=LocateVex(G, v2);  
  
        ArcNode* arc=new ArcNode;  
        arc->adjvex=j;  
        arc->nextarc=G.vertices[i].firstarc;  
        G.vertices[i].firstarc=arc;  
    }  
}  
  
void FindIndegree(ALGraph G, int indegree[])//求顶点的入度  
{  
    for(int i=0; iadjvex]++;  
            p=p->nextarc;  
        }  
    }  
}  
  
void TopologicalSort(ALGraph G)//拓扑排序  
{  
    queue q;  
    int indegree[10]={0};//入度数组  
    int count=0;//计数,计入队数  
  
    FindIndegree(G, indegree);  
  
    for(int i=0; iadjvex]))  
                    q.push(p->adjvex);//入度为0的顶点入队  
            p=p->nextarc;  
  
        }  
    }  
  
    if(count

测试用例一:

 

 

测试用例二:


你可能感兴趣的:(NOIP,图论,NOI,竞赛辅导)