一步两步学算法之图邻接矩阵

#define VERTEX_MAX 26                //图的最大定点数 

#define MAXVALUE 32767                 //最大值

#include "stdio.h"

typedef struct

{

    char Vertex[VERTEX_MAX];            //保存定点信息的数组 

    int Edges[VERTEX_MAX][VERTEX_MAX];    //边的权 

    int IsTrav[VERTEX_MAX];                 //遍历标记 

    int VertexNum;                        //定点数量 

    int EdgeNum;                        //边的数量 

    int GraphType;                        //图的类型 

}MatrixGraph;                            //邻接矩阵结构



void CreateMatrixGraph(MatrixGraph *G);   

void OutMatrix(MatrixGraph *G); 





void CreateMatrixGraph(MatrixGraph *G)

{

    int i,j,k,weight;

    char start,end;

    printf("输入各顶点信息\n");

    for(i=0;i<G->VertexNum;i++)

    {

        getchar();

        printf("第%d个顶点:",i+1);

        scanf("%c",&(G->Vertex[i]));            //输入顶点信息 

    }

    printf("输入构成各边的两个顶点及权值(用逗号分隔):\n");

    for(k=0;k<G->EdgeNum;k++)

    {

        getchar();

        printf("第%d条边:",k+1);

        scanf("%c,%c,%d",&start,&end,&weight);            //输入边的两头节点 和权值 

        for(i=0;i<G->VertexNum;i++)                //从已有的顶点信息数组找这两个顶点并赋予权值 

        {    

            if(start==G->Vertex[i]){

                for(j=0;j<G->VertexNum;j++)

                {

                    if(end==G->Vertex[j])

                    {

                        G->Edges[i][j]=weight;

                            if(G->GraphType==0)

                                G->Edges[j][i]=weight;

                    }

                }

            }

            

        }

    }

} 



void OutMatrix(MatrixGraph *G)

{

    int i,j;

    for(j=0;j<G->VertexNum;j++)

        printf("\t%c",G->Vertex[j]);

    printf("\n");

    for(i=0;i<G->VertexNum;i++)

    {

        printf("%c",G->Vertex[i]);

        for(j=0;j<G->VertexNum;j++)

        {

            if(G->Edges[i][j]==MAXVALUE)

                printf("\t*");

            else

                printf("\t%d",G->Edges[i][j]);

        }

        printf("\n");

    }

} 

int main(){

    MatrixGraph G;

    int i,j;

    printf("生成图类型:0.无向图,1.有向图");

    scanf("%d",&G.GraphType); 

    printf("输入图的顶点数量和边数量");

    scanf("%d,%d",&G.VertexNum,&G.EdgeNum); 

    for(i=0;i<G.VertexNum;i++)

        for(j=0;j<G.VertexNum;j++)

            G.Edges[i][j]=MAXVALUE;

    CreateMatrixGraph(&G);

    printf("邻接矩阵如下\n");

    

    OutMatrix(&G);

    return 0;

}

 

你可能感兴趣的:(算法)