#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

#define MAX_VERTEX_NUM 11    //顶点的最大数
#define INFINITY 32768                
#define Error 0
#define OK 1

typedef enum{DG,DN,UDG,UDN}    GraphKind;    //图的种类 G表示有向图, DN表示有向网, UDG表示无向图, UDN表示无向网
typedef char VertexData;

typedef struct ArcNode
{
        int adj;
}ArcNode;

typedef struct
{
    VertexData vexs[MAX_VERTEX_NUM];                //顶点向量
    ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];        //邻接矩阵
    int  vexnum,arcnum;                        //图的顶点 和 弧数
    GraphKind kind ;        
}AdjMatrix;

int LocateVertex(AdjMatrix *G, VertexData v)                //求顶点的位置坐标
{
        int  j = Error , k;
        for(k=0; k< G->vexnum; k++)
            if( G->vexs[k] == v)
            {
                j = k;
                break;
            }
        return j;
}
int CreateDN(AdjMatrix *G)
{
    int i,j,k,weight;
    VertexData v1,v2;
    printf("请输入顶点的个数和弧数");
    scanf("%d%d",&G->vexnum,&G->arcnum);

    for(i =0; ivexnum;i++)            //初始化
        for(j=0;jvexnum;j++)
            G->arcs[i][j].adj = INFINITY ;

    for(i=0;ivexnum;i++)
    {
            printf("请输入图的顶点\n");
            fflush(stdin);
            scanf("%c",&G->vexs[i]);
    }
    for(k=0;karcnum;k++)
    {
        printf("请输入一条弧的两个顶点及权值");
            fflush(stdin);
        scanf("%c,%c,%d",&v1,&v2,&weight);
        i = LocateVertex(G,v1);
        j = LocateVertex(G,v2);
        G->arcs[i][j].adj = weight;        //建立弧
    }
        return OK;
}
void FindID(AdjMatrix G,int indegree[])
{
    int i,j;
    for(i=0;i