2015-1-26 02:05:11
#include
#include
#include
using namespace std;
ifstream fin("in.txt");
#define MAX_VERTEX_NUM 26
stack s;
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
ArcNode(){nextarc=0;}
// InfoType *info;
}ArcNode;
typedef struct VNode{
int data;
ArcNode *firstarc;
VNode(){firstarc=0;}
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
int kind;
}ALGraph;
bool TopologicalSort(ALGraph G,int *indegree)
{
int i,k;
for(i=1;i
{
if(!indegree[i]){s.push(i);}
}
int count=0;
ArcNode *p;
while(!s.empty())
{
i = s.top();
s.pop();
cout<";
count++;
for(p=G.vertices[i].firstarc;p;p=p->nextarc)
{
k = p->adjvex;
indegree[k]--;
if(!indegree[k])s.push(k);
}
}
if(count
return true;
}
int main()
{
int i;
ALGraph g;
cout<
fin>>g.vexnum>>g.arcnum;
for(i=1;i
g.vertices[i].data = i;
int b,e;
ArcNode *p;
int *indegree = new int[g.vexnum+1];
//注意 int *a=new int(n); 申请一个整型变量空间,赋初值为n,并定义一个整型指针a指向该地址空间
//int *indegree=(int *)malloc(sizeof(int)*(g.vexnum+1));
memset(indegree,0,sizeof(int)*(g.vexnum+1));
cout<
for(i=1;i
{
cout<
fin>>b>>e;
p = new ArcNode();
p->adjvex = e;
p->nextarc = g.vertices[b].firstarc;
g.vertices[b].firstarc = p;
indegree[e]++;
cout<
}
if(TopologicalSort(g,indegree))cout<
else cout<
return 0;
}
其实是一个拓扑排序实现偏序。